<?php
class Seguro_Model_TransmissaoEssor extends Agro_Db_Table_Propostas {
    protected $_schema = 'seguro';
    protected $_name = 'propostas';
    //protected $_view = 'v_propostas';
    protected $_primary = 'id';
    protected $_COAGRO = 0;

    public function save($dados) {
    }

    /**
     * Monta o SQL que sera usado na listagem de propostas
     *
     * @param array $where
     */
    public function getData(array $where) {
    	//cria tabela temporária para buscar fisicos baixados
    	$this->_db->query(
    			"CREATE temp TABLE propostas_fisico_baixado_temp AS (
					select
    			        id_proposta
					from
					    seguro.propostas_status_doc_fisico ps
					where
					    ps.fl_ativo = true
					    and (ps.id_status = 216 or (ps.id_status = 217 and ps.id_proposta not in (select id_proposta from seguro.propostas_pendencias_documento_fisico where id_proposta_status_doc_fisico=ps.id and id_pendencia not in (92,99,107) and fl_ativo=true)))    			
				)"
        );

        $Select = $this->select()->setIntegrityCheck(false)->distinct(false);
        $Select->from(array('spe' => 'seguro.propostas_endosso'), false);
        $Select->join(array('spr' => 'seguro.propostas'), 'spr.id = spe.id_proposta', array('id', 'id_endosso', 'id_status', "to_char(spr.dt_vigencia_inicio, 'dd/mm/yyyy') as dt_vigencia_inicio", 'id_usuario_criacao', 'id_produto', 'ds_status_seguradora', 'nr_digito_verificador', 'id_versao', 'seguro.nr_endosso(spr.id, spr.id_endosso) as nr_endosso', 'id_proposta_mae', 'seguro.id_proposta_mae_completo(spr.id) as id_proposta_mae_completo'));
        $Select->join(array('spt' => 'seguro.propostas_proponentes'), 'spr.id = spt.id_proposta', array('ds_nome_proponente', 'cpf_cnpj'));
        $Select->joinLeft(array('spb' => 'seguro.proposta_boletos'), 'spb.id_proposta = spr.id and spb.id_versao = spr.id_versao and spb.nr_parcela=1', array('fl_pago as fl_pago_boleto'));
        $Select->join(array('spc' => 'seguro.propostas_corretores'), 'spr.id = spc.id_proposta', false);
        $Select->join(array('ppr' => 'produto.produtos'), 'ppr.id = spr.id_produto AND ppr.id_seguradora = 181', array('ds_nome_abreviado', 'ds_nome_produto'));
        $Select->join(array('spd' => 'seguro.propostas_propriedades'), 'spr.id = spd.id_proposta', array('id_municipio'));
        $Select->join(array('smu' => 'sistema.municipios'), 'smu.id = spd.id_municipio', 'ds_nome_municipio');
        $Select->join(array('suf' => 'sistema.estados'), 'suf.id = smu.id_estado', 'ds_sigla');
        $Select->join(array('scr' => 'sistema.corretores'), 'spc.id_usuario = scr.id_usuario', array('ds_nome_fantasia'));
        $Select->join(array('sst' => 'sistema.status'), 'sst.id = spr.id_status', array('ds_cor', 'ds_chave', 'ds_status', 'cd_status'));
        $Select->join(array('sus' => 'sistema.usuarios'), 'sus.id = spr.id_usuario_criacao', 'ds_nome_usuario');
        $Select->joinLeft(array('pcc' => 'seguro.propostas_consulta_cadin'), "spr.id = pcc.id_proposta and pcc.fl_ativo='t'", array('fl_solicitacao_pendente','fl_retorno_pendente'));
        $Select->joinLeft(array('pv' => 'seguro.propostas_versoes'), 'spr.id_versao = pv.id', array('id as id_versao','fl_pendente_transmissao'));
        $Select->joinLeft(array('pfb' => 'propostas_fisico_baixado_temp'), 'pfb.id_proposta = spr.id_proposta_mae', array('id_proposta'));

        $this->getWhere($Select, $where);

        if ($this->_order) {
            $Select->order($this->_order);
        }

        return $Select;
    }

    public function montaXMLTransmissaoEssor($id_proposta, $tp_endosso=false, $id_endosso_rel=false, $ds_observacao=false, $flDevolucaoSubvencao=false) {
        $Model = new Seguro_Model_Propostas();
        $ModelProduto = new Produto_Model_Produtos();
        $ModelAssessoria = new Sistema_Model_AssessoriasCorretores();
        $IndiceProducaoForrageira = new Seguro_Model_PropostasIndiceProducaoForrageira();
        $ModelAssessoriaPrepostos = new Sistema_Model_AssessoriasPrepostos();
        $modelPropostaCancelamentoApolice = new Seguro_Model_PropostaCancelamentoApolice();

        $Proposta = $Model->find($id_proposta)->current();
        $PropostaOriginal = $Model->find($Proposta->id_proposta_endossada)->current();
        $PropostaMae = $Model->find($Proposta->id_proposta_mae)->current();
        $RowProduto = $ModelProduto->find($Proposta->id_produto)->current();
        $Proponente = $Proposta->proponente();
        $Propriedade = $Proposta->propriedade();
        $Corretor = $Proposta->corretor(true);
        $Preposto = $Proposta->preposto();
        $coberturasContratadasProposta = $Proposta->coberturas_contratadas();
        $coberturasNovas = [];
        $temPropostaOriginal = !empty($PropostaOriginal);

        if ($temPropostaOriginal) {
            $coberturasContratadasPropostaOriginal = $PropostaOriginal->coberturas_contratadas();
            $coberturasNovas = array_diff_key($coberturasContratadasProposta, $coberturasContratadasPropostaOriginal);
        }

        if (!$Preposto['id']) {
            $Assessoria = $ModelAssessoria->getAssessoriaByCorretor($Corretor['id'], $PropostaMae->dt_criacao);
        } else {
            $Assessoria = $ModelAssessoriaPrepostos->getAssessoriaByPreposto($Preposto['id'], $PropostaMae->dt_criacao);
        }

        if ($Assessoria) {
            $Assessoria = $Assessoria->toArray();
        }

        $Produto = $Proposta->produto();
        $Cobranca = $Proposta->cobranca();
        $Questionario = $Proposta->questionario();
        $Beneficiarios = $Proposta->beneficiarios();
        $Safra = $Proposta->safra();

        $nm_obs_endosso_relacionado = '';
        $valorParaDistribuir = null;
        $Coberturas = $Proposta->valoresCoberturas();
        $valorSubvencaoEstadualProposta = $Proposta->subvencao_estadual();
        $valorSubvencaoFederalProposta = $Proposta->subvencao_federal();
        $statusProposta = $Proposta->status();
        $comissaoCorretor = $Proposta->comissaoCorretor();
        $premioLiquido = $Proposta->premio_liquido();
        $premioLiquidoPropostaOriginal = $temPropostaOriginal ? $PropostaOriginal->premio_liquido() : 0;
        $premioSegurado = $Proposta->premio_segurado();
        $lmga = $Proposta->lmga();

        if ($statusProposta == 'NAO_ENVIADA' || $statusProposta == 'DEVOLVIDA') {
            $cd_tipo_endosso = '';
            $nm_obs_endosso = '';
            if ($Proposta->ds_identificador_seguradora > 0) {
                $nm_obs_endosso_relacionado = 'Proposta modificada.';
                $id_endosso_relacionado = $Proposta->ds_identificador_seguradora;
            }
        } elseif ($statusProposta == 'ORCAMENTO_ENDOSSO' || $statusProposta == 'APOLICE_EMITIDA') {
            $id_endosso_relacionado = $id_endosso_rel;
            $nm_obs_endosso = $ds_observacao;

            switch ($tp_endosso) {
                case 'COBRANCA':
                    $cd_tipo_endosso = '6';
                    break;
                case 'REDUCAO':
                    $cd_tipo_endosso = '3';
                    break;
                case 'SEM_MOVIMENTO':
                    $cd_tipo_endosso = '4';
                    break;
                case 'CANCELAMENTO':
                    $cd_tipo_endosso = '2';
                    break;
            }

        } else {
            $cd_tipo_endosso = '';
            $nm_obs_endosso = '';
            if ($Proposta->ds_identificador_seguradora > 0) {
                $id_endosso_relacionado = $Proposta->ds_identificador_seguradora;
                $nm_obs_endosso_relacionado = 'Proposta modificada.';
            }
        }

        $propostaDoc = str_replace('-', '', str_replace('.', '', $Proposta->doc()));
        $subvencaoFederal = ($valorSubvencaoFederalProposta > 0) ? 'true' : 'false';
        $subvencaoEstadual = ($valorSubvencaoEstadualProposta > 0) ? 'true' : 'false';
        $anoSafra = substr($Safra['ds_nome_safra'], 0, 4);

        /**
         * Valida a data de transmissão e emissão da proposta mãe, para verificar qual percentual de participação da Agro
         * deve ser considerado. Regras:
         * Transmissão < 23/02/2022 10:29 : 0
         * Transmissao >= 23/02/2022 10:29 E Emissão <= 30/06/2022: 7.95
         * Transmissao >= 23/02/2022 10:29 E Transmissão <= 13/07/2022 E Emissão > 30/06/2022: 5.95
         * Transmissao >= 14/07/2022: 6.25
         *
         * ################################
         * A partir de 04/12/2023 - Nova regra
         * Proposta mãe (endosso 0): propostas transmitidas para Essor a partir de 04/12/2023 devem estar sem a comissão da Agro no xml ou comissão igual a 0.00
         * Endossos transmitidos até 31/12/2023 devem ter o % de comissão da Agro igual ao da proposta mãe.
         * Endossos transmitidos a partir de 01/01/2024 devem estar sem a comissão da Agro no xml ou comissão igual a 0.00.
         */
        $rowsLogsTransmissao = (new Log_Model_PropostasTransmissao())->fetchAll(["id_proposta = {$PropostaMae['id']}"], "dt_criacao")->toArray();
        $encontrouPrimeiraTransmissao = false;
        $encontrouPrimeiraGeracaoApolice = false;
        $dataGeracaoApolice = '';
        $dataTransmissao = '';
        $dataBaseGeracaoApolice = new DateTimeImmutable('2022-06-30');
        $dataBaseTransmissaoAnterior = new DateTimeImmutable('2022-02-23 10:29');
        $dataBaseTransmissaoAtual = new DateTimeImmutable('2022-07-14');
        $dataBaseTransmissaoPropostaMae = new DateTimeImmutable('2023-12-04');
        $dataBaseTransmissaoEndosso2024 = new DateTimeImmutable('2024-01-01');

        foreach ($rowsLogsTransmissao as $logTransmissao) {
            if (!$encontrouPrimeiraTransmissao && $logTransmissao['id_status'] === Seguro_Model_Propostas::ID_STATUS_ENVIADA_AGUARDANDO_CONF && $logTransmissao['ds_tipo_transmissao'] === 'EMITIR_PROPOSTA') {
                $encontrouPrimeiraTransmissao = true;
                $dataTransmissao = $logTransmissao['dt_criacao'];
            }

            if (!$encontrouPrimeiraGeracaoApolice && $logTransmissao['id_status'] === Seguro_Model_Propostas::ID_STATUS_APOLICE_EMITIDA && $logTransmissao['ds_tipo_transmissao'] === 'GerarApolice') {
                $encontrouPrimeiraGeracaoApolice = true;
                $dataGeracaoApolice = $logTransmissao['dt_criacao'];
            }
        }

        if (empty($dataTransmissao)) {
            if (date('Y-m-d') >= $dataBaseTransmissaoAtual->format('Y-m-d')) {
                $this->_COAGRO = 6.25;
            }

            if (date('Y-m-d H:i') >= $dataBaseTransmissaoAnterior->format('Y-m-d H:i') && date('Y-m-d') < $dataBaseTransmissaoAtual->format('Y-m-d')) {
                $this->_COAGRO = 5.95;
            }
        }

        if (!empty($dataTransmissao)) {
            $dateTimeTransmissao = new DateTimeImmutable($dataTransmissao);

            if ($dataBaseTransmissaoAnterior->diff($dateTimeTransmissao)->invert) {
                $this->_COAGRO = 0;
            }

            if ($dateTimeTransmissao->diff($dataBaseTransmissaoAnterior)->invert) {
                if ($dataBaseTransmissaoAtual->diff($dateTimeTransmissao)->invert) {
                    if (empty($dataGeracaoApolice)) {
                        $this->_COAGRO = 5.95;
                    }

                    if (!empty($dataGeracaoApolice)) {
                        $this->_COAGRO = 5.95;
                        $dateTimeGeracaoApolice = new DateTimeImmutable($dataGeracaoApolice);

                        if ($dataBaseGeracaoApolice->diff($dateTimeGeracaoApolice)->invert) {
                            $this->_COAGRO = 7.95;
                        }
                    }
                }

                if ($dateTimeTransmissao->diff($dataBaseTransmissaoAtual)->invert) {
                    $this->_COAGRO = 6.25;
                }
            }
        }

        if (!$tp_endosso && date('Y-m-d') >= $dataBaseTransmissaoPropostaMae->format('Y-m-d')) {
            $this->_COAGRO = 0;
        }

        if ($tp_endosso && date('Y-m-d') >= $dataBaseTransmissaoEndosso2024->format('Y-m-d')) {
            $this->_COAGRO = 0;
        }

        $dataAux = !empty($Proposta->dt_transmissao) ? $Proposta->dt_transmissao : $Proposta->dt_criacao;
		$aplicarNovaLeiSeguro = strtotime($dataAux) >= strtotime(DATA_INICIO_NOVA_LEI_SEGURO) ||
            $Proposta->id_status == Seguro_Enum_PropostaStatus::ID_NAO_ENVIADA;

		$propostaDoc = strlen($propostaDoc) > 15 ? substr($propostaDoc,0, 15-strlen($propostaDoc)) : $propostaDoc;
        $propostaCancelamentoApolice = $modelPropostaCancelamentoApolice->fetchAll("id_proposta = {$Proposta->id}", 'id DESC')->current();
        
        $isEndosso0 = $Proposta->id == $Proposta->id_proposta_mae;
        $dataInicioVigencia = $Proposta->dt_vigencia_inicio;

        if ($isEndosso0) {
            $dataInicioVigencia = (new Seguro_Service_Proposta())->maiorDataEntreVigenciaInicioTransmissao(
                substr($Proposta->dt_vigencia_inicio, 0, 10)
            );
        }
        
        // Quando for transmitir o cancelamento e não for endosso zero, é pra pegar a data de emissão do endosso.
        // Quando for endosso 0 e for uma transmissão de cancelamento, pega a data definida na hora do cancelamento
        if ($tp_endosso == 'CANCELAMENTO') {
            if (!$isEndosso0) {
                $dataEmissao = (new Log_Model_PropostasTransmissao())->getDataEmissaoEndosso($Proposta->id);
                $dataInicioVigencia = $dataEmissao ? $dataEmissao : $dataInicioVigencia;
            } else {
                if (!empty($propostaCancelamentoApolice)) {
                    $dataInicioVigencia = $propostaCancelamentoApolice['dt_inicio_vigencia_cancelamento'];
                }
            }
        }

        $dataInicioVigencia = substr($dataInicioVigencia, 0, 10);
        
        $xml = "
        <EnviarPropostaSeguroAgricola xmlns=\"http://www.essor.com.br/\">
        <propostaSeguroAgricola xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">
            <safra>{$anoSafra}</safra>
            <codigoPropostaCorretor>" . $propostaDoc . "</codigoPropostaCorretor>
            <id_endosso_relacionado>" . $id_endosso_relacionado . "</id_endosso_relacionado>
            <nm_obs_endosso_relacionado>" . trim($nm_obs_endosso_relacionado) . "</nm_obs_endosso_relacionado>
            <cd_tipo_endosso>" . $cd_tipo_endosso . "</cd_tipo_endosso>
            <nm_obs_endosso>" . trim($nm_obs_endosso) . "</nm_obs_endosso>
            <codigo>3</codigo>
            <tipoApolice>Nenhum</tipoApolice>
            <tipo>Nova</tipo>
            <nm_secao>Seção {$Proposta->id_secao}</nm_secao>
            <indicadorSubvencaoFederal>$subvencaoFederal</indicadorSubvencaoFederal>
            <indicadorSubvencaoSuspensa>false</indicadorSubvencaoSuspensa>
            <indicadorSubvencaoEstadual>$subvencaoEstadual</indicadorSubvencaoEstadual>
            <indicadorAdiada>false</indicadorAdiada>          
            <municipioCliente>
                <codigo>{$Propriedade['cd_bacen']}</codigo>
            </municipioCliente>
            <vl_ipf>{$IndiceProducaoForrageira->getIndiceByProposta($Proposta->id)}</vl_ipf>
        ";
        /*
         * Para ser incluído posteriormente - solicitação 3837
         *
         *          <bolsareferenciada></bolsareferenciada>
                    <desagio></desagio>
                    <dataExecucao></dataExecucao>
                    <totalFaturamentoGarantido></totalFaturamentoGarantido>
         */
        $xml .= "
            <cliente>";
        //retira pontos, barras e traços do cpf_cnpj e doc_numero
        $cpf_cnpj = str_replace('.', '', str_replace('/', '', str_replace('-', '', $Proponente['cpf_cnpj'])));
        $stDocOrgExp = substr($Proponente['ds_nome_orgao'], 0, 3);
        $stDocOrgExpUF = substr($Proponente['ds_nome_orgao'], 4, 2);

        if (substr($Proponente['ds_nome_orgao'], 0, 3) != "SSP") {
            $stDocOrgExp = substr($Proponente['ds_nome_orgao'], 0, 3);
            $stDocOrgExpUF = "BR";
        }

        if($Proponente['tp_pessoa'] == 'F') {
            $dsNomeSocial = !empty($Proponente['ds_nome_social']) ? $Proponente['ds_nome_social'] : null;
            
            $numeroDocumento = $Proponente['ds_documento_numero'];
            $orgaoExpedidor = $stDocOrgExp;
            $dataOrgaoExpedicao = $Proponente['dt_documento_exp'];
            $tipoDocumento = 'RG';
            $estadoDocumento = $stDocOrgExpUF;
            
            if ($Proponente['ds_documento_numero'] == '') {
                $numeroDocumento = '';
                $orgaoExpedidor = '';
                $dataOrgaoExpedicao = '';
                $tipoDocumento = '';
                $estadoDocumento = '';
            }

            $estadoCivil = $aplicarNovaLeiSeguro
                ? 'Não informado'
                : ucwords(strtolower($Proponente['ds_nome_estado_civil']));

            $xml .= "
                <tipo>Fisica</tipo>
                <nome>{$Proponente['ds_nome_proponente']}</nome>
                <nm_pessoa_social>{$dsNomeSocial}</nm_pessoa_social>
                <detalhe xsi:type=\"DetalhePessoaFisica\">
                    <cpf>$cpf_cnpj</cpf>
                    <IsCPFProprio>true</IsCPFProprio>
                    <dataNascimento>{$Proponente['dt_nascimento']}</dataNascimento>
                    <genero>Não informado</genero>
                    <estadoCivil>{$estadoCivil}</estadoCivil>
                    <documentoIdentificacao>
                        <orgaoExpedidor>
                            <sigla>{$orgaoExpedidor}</sigla>
                        </orgaoExpedidor>
                        <numero>{$numeroDocumento}</numero>
                        <dataExpedicao>{$dataOrgaoExpedicao}</dataExpedicao>
                        <estado>
                            <uf>{$estadoDocumento}</uf>
                        </estado>
                        <tipo>{$tipoDocumento}</tipo>
                    </documentoIdentificacao>
                </detalhe>
                ";
        } else {
            $ds_nome_proponente = str_replace("&", "e", $Proponente['ds_nome_proponente']);
            $xml .= "
                <tipo>Juridica</tipo>
                <nome>{$ds_nome_proponente}</nome>
                <detalhe xsi:type=\"DetalhePessoaJuridica\">
                    <cnpj>$cpf_cnpj</cnpj>
                    <nomeFantasia>{$ds_nome_proponente}</nomeFantasia>
                </detalhe>
                ";
        }

        $tipo_corretor = ($Corretor['tp_pessoa'] == 'J') ? 'Juridica' : 'Fisica';
        $cpf_cnpj_corr = str_replace('.', '', str_replace('/', '', str_replace('-', '', $Corretor['cpf_cnpj'])));
        $cep = str_replace('-', '', $Proponente['ds_endereco_cep']);

        $cpf_cnpj_assess = str_replace('.', '', str_replace('/', '', str_replace('-', '', $Assessoria['cpf_cnpj'])));

        $percentualComissaoCorretor = $comissaoCorretor;
        $percentualComissaoCorretor = number_format($percentualComissaoCorretor, 2, '.', '');
        $valorPercentualAssessoria = $Assessoria['vl_percentual'];

        if ($Assessoria['tp_comissao'] === Sistema_Model_Assessorias::TP_COMISSAO_PROPORCIONAL) {
            $valorPercentualAssessoria = ($percentualComissaoCorretor * $valorPercentualAssessoria) / 100;
        }

        $comissao_corretor = $this->calculaComissao($percentualComissaoCorretor, $valorPercentualAssessoria);
        $comissao_assessoria = 100 - $comissao_corretor;

        //aplicando comissão da agro
        $comissao_corretor = round($this->calculaComissaoAgro($percentualComissaoCorretor, $comissao_corretor), 2);
        $comissao_assessoria = round($this->calculaComissaoAgro($percentualComissaoCorretor, $comissao_assessoria), 2);
        $comissao_agro = round((100 - $comissao_corretor - $comissao_assessoria), 2);
        $xmlComunicacao = "";

        if ($Proponente['ds_tel_residencia']) {
            $stTelefoneDDD = substr($Proponente['ds_tel_residencia'], 0, 4);
            $stTelefoneNumero = substr($Proponente['ds_tel_residencia'], 4);
            $xmlComunicacao .= "
		            <meios_comunicacao>
            			<cd_tp_meio_comunicacao>2</cd_tp_meio_comunicacao>
		            	<nm_meio_comunicacao>" . $stTelefoneNumero . "</nm_meio_comunicacao>
		            	<nr_DDD>" . str_replace(')', '', str_replace('(', '', $stTelefoneDDD)) . "</nr_DDD>
		            </meios_comunicacao>";
        }

        if ($Proponente['ds_tel_propriedade']) {
            $stTelefoneDDD = substr($Proponente['ds_tel_propriedade'], 0, 4);
            $stTelefoneNumero = substr($Proponente['ds_tel_propriedade'], 4);
            $xmlComunicacao .= "
		            <meios_comunicacao>
            			<cd_tp_meio_comunicacao>1</cd_tp_meio_comunicacao>
		            	<nm_meio_comunicacao>" . $stTelefoneNumero . "</nm_meio_comunicacao>
		            	<nr_DDD>" . str_replace(')', '', str_replace('(', '', $stTelefoneDDD)) . "</nr_DDD>
		            </meios_comunicacao>";
        }

        if ($Proponente['ds_tel_celular']) {
            $stTelefoneDDD = substr($Proponente['ds_tel_celular'], 0, 4);
            $stTelefoneNumero = substr($Proponente['ds_tel_celular'], 4);
            $xmlComunicacao .= "
		            <meios_comunicacao>
            			<cd_tp_meio_comunicacao>3</cd_tp_meio_comunicacao>
		            	<nm_meio_comunicacao>" . $stTelefoneNumero . "</nm_meio_comunicacao>
		            	<nr_DDD>" . str_replace(')', '', str_replace('(', '', $stTelefoneDDD)) . "</nr_DDD>
		            </meios_comunicacao>";
        }

        if ($Proponente['ds_email_proponente']) {
            $xmlComunicacao .= "
		            <meios_comunicacao>
            			<cd_tp_meio_comunicacao>4</cd_tp_meio_comunicacao>
		            	<nm_meio_comunicacao>" . strtolower($Proponente['ds_email_proponente']) . "</nm_meio_comunicacao>
		            </meios_comunicacao>";
        }

        $xml .= "<meio_comunicacao>$xmlComunicacao</meio_comunicacao>";

        //endereco e corretor
        $xml .= "
            <enderecos>
                <endereco>
                    <numero>{$Proponente['ds_endereco_nro']}</numero>
                    <complemento>{$Proponente['ds_endereco_complem']}</complemento>
                    <logradouro>
                        <nome>{$Proponente['ds_endereco_rua']}</nome>
                        <cep>$cep</cep>
                        <bairro>
                            <nome>" . $Proponente['ds_endereco_bairro'] . "</nome>
                            <localidade>
                                <codigo>0</codigo>
                                <nome>{$Proponente['ds_nome_municipio']}</nome>
                                <estado>
                                    <codigo>0</codigo>
                                    <nome>{$Proponente['ds_nome_estado']}</nome>
                                    <uf>{$Proponente['ds_sigla']}</uf>
                                </estado>
                            </localidade>
                        </bairro>
                    </logradouro>
                    <utilizacoes>
                        <utilizacao>Residencial</utilizacao>
                    </utilizacoes>
                </endereco>
            </enderecos>
            <emails />";

        $ds_nome_corretor = str_replace("&", "e", $Corretor['ds_nome_corretor']);
        $xml .= "<contratos />";
        $xml .= "</cliente>";

        $SubProduto = $Produto['cd_produto_seguradora'];

        $xml .= "
            <produto>
                <codigo>{$SubProduto}</codigo>
            </produto>

            <vigenciaSeguro>
                <tipo>Anual</tipo>
                <dataInicio>{$dataInicioVigencia}</dataInicio>
                <dataFim>" . substr($Proposta->dt_vigencia_fim, 0, 10) . "</dataFim>
            </vigenciaSeguro>
            <dataBaseCalculo>" . date("Y-m-d") . "</dataBaseCalculo>
            <corretagem>
                <coeficienteComissao>0</coeficienteComissao>
                <percentual>" . number_format(($percentualComissaoCorretor + $this->_COAGRO), 2, '.', '') . "</percentual>
                <participantes>
                    <participante>
                        <lider>1</lider>
                        <percentualParticipacao>" . number_format($comissao_corretor, 2, '.', '') . "</percentualParticipacao>
                        <tipo>$tipo_corretor</tipo>
                        <cd_tp_comissao>2</cd_tp_comissao>";

        if ($Corretor['tp_pessoa'] == 'J') {
            $xml .= "
                            <detalhe xsi:type=\"DetalhePessoaJuridica\">
                                <cnpj>$cpf_cnpj_corr</cnpj>
                                <nomeFantasia>{$ds_nome_corretor}</nomeFantasia>
                            </detalhe>";
        } else {
            $xml .= "
                            <detalhe xsi:type=\"DetalhePessoaFisica\">
                                <cpf>$cpf_cnpj_corr</cpf>
                                <nome>{$ds_nome_corretor}</nome>
                            </detalhe>";
        }

        $xml .= "
                        <inspetor>
                            <codigo>1854</codigo>
                        </inspetor>
                     </participante>";
        if (is_array($Assessoria)) {
            $codigoTipoComissao = $Assessoria['tp_tipo'] === Sistema_Model_Assessorias::TP_TIPO_ASSESSORIA ? 3 : 2;
            $xml .= "<participante>
                                <lider>0</lider>
                                <percentualParticipacao>" . number_format($comissao_assessoria, 2, '.', '') . "</percentualParticipacao>
                                ";

            if (strlen($cpf_cnpj_assess) == 14) {
                $xml .= "<tipo>Juridica</tipo>
                                    ";
            } else {
                $xml .= "<tipo>Fisica</tipo>
                                    ";
            }

            $xml .= "<cd_tp_comissao>{$codigoTipoComissao}</cd_tp_comissao>";

            if (strlen($cpf_cnpj_assess) == 14) {
                $xml .= "
                                    <detalhe xsi:type=\"DetalhePessoaJuridica\">
                                        <cnpj>" . $cpf_cnpj_assess . "</cnpj>
                                        <nomeFantasia>" . $Assessoria['ds_nome_assessoria'] . "</nomeFantasia>
                                    </detalhe>";
            } else {
                $xml .= "
                                    <detalhe xsi:type=\"DetalhePessoaFisica\">
                                        <cpf>" . $cpf_cnpj_assess . "</cpf>
                                        <nome>" . $Assessoria['ds_nome_assessoria'] . "</nome>
                                    </detalhe>";
            }
            $xml .= "
                                <inspetor>
                                    <codigo>1854</codigo>
                                </inspetor>
                            </participante>";
        }

        if (!empty($comissao_agro)) {
            $xml .= $this->getXMLAgroParticipante($comissao_agro);
        }

        $xml .= "</participantes>
             </corretagem>";

        $valorTotal = $valorLiquido = $percentualCarregamento = '0.00';
        $valorBasePremioCalculoCoberturas = 0;
        $Proposta->vl_custo_apolice = '0.00';

        if ($tp_endosso != 'SEM_MOVIMENTO') {
            $valorTotal = $Cobranca['premio_liquido'] + $Proposta->vl_custo_apolice;

            if (
                $tp_endosso == 'COBRANCA'
                && ($premioLiquido == $premioLiquidoPropostaOriginal || $premioLiquido < $premioLiquidoPropostaOriginal)
            ) {
                $valorTotal = 0;

                if ($premioSegurado > 0) {
                    $valorTotal += $premioSegurado;
                }

                if ($valorSubvencaoFederalProposta > 0) {
                    $valorTotal += $valorSubvencaoFederalProposta;
                }

                if ($valorSubvencaoEstadualProposta > 0) {
                    $valorTotal += $valorSubvencaoEstadualProposta;
                }

                $valorPremioParcelas = $valorTotal;
            }
            
            $valorAuxiliar = $valorSubvencaoFederalProposta + $valorSubvencaoEstadualProposta + $premioSegurado;
            $temCobrancaIntegralSubsidio = in_array(true, array_column($Cobranca['parcelamento'], 'id_motivo_cobranca_subvencao_segurado'));

            if ($temCobrancaIntegralSubsidio) {
                $valorAuxiliar = $premioSegurado;
            }

            $valorLiquido = $valorBasePremioCalculoCoberturas = number_format(
                abs($valorAuxiliar),
                2,
                '.',
                ''
            );
            $valorTotal = number_format($valorTotal, 2, '.', '');

            if ($temPropostaOriginal && ($valorTotal < $premioLiquidoPropostaOriginal)) {
                $valorTotal = $valorLiquido;
            }

            $percentualCarregamento = 45 - $comissaoCorretor;
        }

        $xml .= "
            <premio>
                <valorLiquido>$valorLiquido</valorLiquido>
                <valorTotal>$valorLiquido</valorTotal>
                <valorIof>0.00</valorIof>
                <valorJuros>0.00</valorJuros>
                <valorTarifario>$valorLiquido</valorTarifario>
                <valorCustoApolice>" . number_format($Proposta->vl_custo_apolice, 2, '.', '') . "</valorCustoApolice>
                <percentualIof>0.00</percentualIof>
                <valorCustoVistoria>0.00</valorCustoVistoria>
                <percentualJuros>0.00</percentualJuros>
                <percentualDesconto>0.00</percentualDesconto>
                <percentualAgravamento>0.00</percentualAgravamento>
                <valorDesconto>0.00</valorDesconto>
                <valorAgravamento>0.00</valorAgravamento>
                <percentualCarregamento>$percentualCarregamento</percentualCarregamento>
                <formaPagamento>
                    <codigo>16</codigo>
                    <tipoRegraDataVencimentoParcela>DataInicioVigencia</tipoRegraDataVencimentoParcela>
                </formaPagamento>
            </premio>";

        if (is_array($Cobranca['parcelamento'])) {
            if ($tp_endosso == 'REDUCAO') {
                $countParcela = 1;
                foreach ($Cobranca['parcelamento'] as $parcela) {
                    $valorTotal = ($parcela['vl_segurado'] + $parcela['vl_subvencao_federal'] + $parcela['vl_subvencao_estadual']);
                    if ($valorTotal < 0) {
                        $valorTotal *= -1;
                    }
                    $valorLiquido = $valorTotal;
                    $valorTarifario = $valorTotal;
                    $valorSegurado = ($parcela['vl_segurado'] > 0) ? $parcela['vl_segurado'] : $parcela['vl_segurado'] * -1;
                    $valorSubEstadual = ($parcela['vl_subvencao_estadual'] >= 0) ? $parcela['vl_subvencao_estadual'] : $parcela['vl_subvencao_estadual'] * -1;
                    $valorSubFederal = ($parcela['vl_subvencao_federal'] >= 0) ? $parcela['vl_subvencao_federal'] : $parcela['vl_subvencao_federal'] * -1;
                    $valorCustoApolice = '0.00';

                    $percentualCarregamento = 45 - $comissaoCorretor;

                    $valorParaDistribuir += $valorLiquido;

                    $parcelas .= "
                        <parcela>
                        <numero>$countParcela</numero>
                        <premio>
                            <valorLiquido>" . number_format($valorLiquido, 2, '.', '') . "</valorLiquido>
                            <valorTotal>" . number_format($valorTotal, 2, '.', '') . "</valorTotal>
                            <valorIOF>0.00</valorIOF>
                            <valorJuros>0.00</valorJuros>
                            <valorTarifario>" . number_format($valorTarifario, 2, '.', '') . "</valorTarifario>
                            <valorCustoApolice>" . number_format($valorCustoApolice, 2, '.', '') . "</valorCustoApolice>
                            <percentualIOF>0.00</percentualIOF>
                            <valorCustoVistoria>0.00</valorCustoVistoria>
                            <percentualJuros>0.00</percentualJuros>
                            <percentualDesconto>0.00</percentualDesconto>
                            <percentualAgravamento>0.00</percentualAgravamento>
                            <valorDesconto>0.00</valorDesconto>
                            <valorAgravamento>0.00</valorAgravamento>
                            <percentualCarregamento>$percentualCarregamento</percentualCarregamento>
                            <valorSubvencaoEstadual>{$valorSubEstadual}</valorSubvencaoEstadual>
                            <valorSubvencaoFederal>{$valorSubFederal}</valorSubvencaoFederal>
                            <valorSegurado>{$valorSegurado}</valorSegurado>
                        </premio>
                        <dataVencimento>".date('Y-m-d', strtotime(date('Y-m-d'). '+5 day'))."</dataVencimento>
                        </parcela>";

                    $countParcela++;

                }
            } else {
                $parcelas = '';
                $primeiraParcela = true;
                $subvencaoEstadual = 'false';
                $subvencaoFederal = 'false';
                $totalSubvencaoFederal = 0;
                $totalSubvencaoEstadual = 0;

                foreach ($Cobranca['parcelamento'] as $parcela) {
                    $totalSubvencaoEstadual += $parcela['vl_subvencao_estadual'];

                    if ($parcela['vl_subvencao_estadual'] != '') {
                        $subvencaoEstadual = 'true';
                    }
                    $totalSubvencaoFederal += $parcela['vl_subvencao_federal'];
                    if ($parcela['vl_subvencao_federal'] != '') {
                        $subvencaoFederal = 'true';
                    }

                    $valorTotal = $parcela['vl_segurado'] + $parcela['vl_subvencao_federal'] + $parcela['vl_subvencao_estadual'];
                    $valorLiquido = $valorTotal;
                    $valorTarifario = $valorTotal;
                    $valorSegurado = $parcela['vl_segurado'];
                    $valorCustoApolice = '0.00';

                    if ($primeiraParcela) {
                        $primeiraParcela = false;
                        $valorLiquido = $valorLiquido - $Proposta->vl_custo_apolice;
                        $valorSegurado = $parcela['vl_segurado'] - $Proposta->vl_custo_apolice;
                        $valorTarifario = $valorTotal - $Proposta->vl_custo_apolice;
                        $valorCustoApolice = $Proposta->vl_custo_apolice;

                        if ($valorSegurado == '0.01') {
                            $flDevolucaoSubvencao = true;
                        }
                    }

                    $percentualCarregamento = 45 - $comissaoCorretor;

                    if ($valorTotal > 0) {
                        $valorParaDistribuir += $valorLiquido;
                        $valorTotalAcumulado += $valorTotal;

                        $parcelas .= "
	                        <parcela>
	                        <numero>{$parcela['nr_parcela']}</numero>
	                        <premio>
	                            <valorLiquido>" . number_format($valorLiquido, 2, '.', '') . "</valorLiquido>
	                            <valorTotal>" . number_format($valorTotal, 2, '.', '') . "</valorTotal>
	                            <valorIOF>0.00</valorIOF>
	                            <valorJuros>0.00</valorJuros>
	                            <valorTarifario>" . number_format($valorTarifario, 2, '.', '') . "</valorTarifario>
	                            <valorCustoApolice>" . number_format($valorCustoApolice, 2, '.', '') . "</valorCustoApolice>
	                            <percentualIOF>0.00</percentualIOF>
	                            <valorCustoVistoria>0.00</valorCustoVistoria>
	                            <percentualJuros>0.00</percentualJuros>
	                            <percentualDesconto>0.00</percentualDesconto>
	                            <percentualAgravamento>0.00</percentualAgravamento>
	                            <valorDesconto>0.00</valorDesconto>
	                            <valorAgravamento>0.00</valorAgravamento>
	                            <percentualCarregamento>$percentualCarregamento</percentualCarregamento>";
                        if ($parcela['nu_boleto']) {
                            $parcelas .= "
	                                <documentoPagamento xsi:type=\"BoletoCobranca\">
	                                <numeroDocumento>{$parcela['nu_boleto']}</numeroDocumento>
	                                <identificador>
	                                <descricao>{$parcela['ds_identificador']}</descricao>
	                                <utilizacao>DocumentoPagamento</utilizacao>
	                                </identificador>
	                                </documentoPagamento>";
                        }
                        $parcelas .= "
	                            <valorSubvencaoEstadual>{$parcela['vl_subvencao_estadual']}</valorSubvencaoEstadual>
	                            <valorSubvencaoFederal>{$parcela['vl_subvencao_federal']}</valorSubvencaoFederal>
	                            <valorSegurado>{$valorSegurado}</valorSegurado>
	                        </premio>
                            <dataVencimento>" . ($tp_endosso == "CANCELAMENTO" ? date('Y-m-d', strtotime(date('Y-m-d') . '+1 day')) : $parcela['dt_vencimento']) . "</dataVencimento>
                            </parcela>";
                    }
                }
            }

            if ($tp_endosso == 'REDUCAO' || $tp_endosso == 'COBRANCA') {
                if (!$valorTotal || $valorTotal == 0 || $valorTotal == '0') {
                    die('O parcelamento não pode estar zerado. Verifique se as parcelas foram salvas.');
                }
            }

            $xml .= "<parcelas>$parcelas</parcelas>";
        } //BLOCO DE PARCELAMENTO ZERADO PARA ENDOSSO SEM MOVIMENTO
        elseif ($tp_endosso == 'SEM_MOVIMENTO') {
            $xml .= "
                    <parcelas>
                        <parcela>
                            <numero>1</numero>
                            <premio>
                                <valorLiquido>0.00</valorLiquido>
                                <valorTotal>0.00</valorTotal>
                                <valorIOF>0.00</valorIOF>
                                <valorJuros>0.00</valorJuros>
                                <valorTarifario>0.00</valorTarifario>
                                <valorCustoApolice>0.00</valorCustoApolice>
                                <percentualIOF>0.00</percentualIOF>
                                <valorCustoVistoria>0.00</valorCustoVistoria>
                                <percentualJuros>0.00</percentualJuros>
                                <percentualDesconto>0.00</percentualDesconto>
                                <percentualAgravamento>0.00</percentualAgravamento>
                                <valorDesconto>0.00</valorDesconto>
                                <valorAgravamento>0.00</valorAgravamento>
                                <percentualCarregamento>0.00</percentualCarregamento>
                                <valorSubvencaoEstadual>0.00</valorSubvencaoEstadual>
                                <valorSubvencaoFederal>0.00</valorSubvencaoFederal>
                                <valorSegurado>0.00</valorSegurado>
                            </premio>
                            <dataVencimento>".date('Y-m-d', strtotime(date('Y-m-d'). '+5 day'))."</dataVencimento>
                        </parcela>
                    </parcelas>
                ";

        }

        $PropEnderecoNro = ($Propriedade['ds_endereco_nro'] > 0) ? $Propriedade['ds_endereco_nro'] : '1';

        if ($tp_endosso == 'SEM_MOVIMENTO') {
            $xml .= "
                <valorSubvencaoFederal>0.00</valorSubvencaoFederal>
                <valorSubvencaoEstadual>0.00</valorSubvencaoEstadual>
            ";
        } else {
            $subvencaoFederalTotal = $valorSubvencaoFederalProposta;

            if ($valorSubvencaoFederalProposta < 0) {
                $subvencaoFederalTotal = $valorSubvencaoFederalProposta * -1;

                if ($flDevolucaoSubvencao) {
                    $subvencaoFederalTotal = 0;
                }
            }

            $subvencaoEstadualTotal = $valorSubvencaoEstadualProposta;

            if ($valorSubvencaoEstadualProposta < 0) {
                $subvencaoEstadualTotal = $valorSubvencaoEstadualProposta * -1;

                if ($flDevolucaoSubvencao) {
                    $subvencaoEstadualTotal = 0;
                }
            }

            $xml .= "
                <valorSubvencaoFederal>{$subvencaoFederalTotal}</valorSubvencaoFederal>
                <valorSubvencaoEstadual>{$subvencaoEstadualTotal}</valorSubvencaoEstadual>
            ";
        }

        foreach ($Coberturas as $cobertura) {
            if ($cobertura->fl_principal) {
                $vl_franquia = $cobertura->vl_franquia;
                break;
            }
        }

        $xml .= "
        <locais>
            <local>
                <codigo>1</codigo>
                <numero>{$PropEnderecoNro}</numero>
                <nome>" . str_replace("&", "E", $Propriedade['ds_nome_propriedade']) . "</nome>
                <vl_franquia>" . number_format(($Proposta->lmga() * $vl_franquia) / 100, 2, '.', '') . "</vl_franquia>
                <complemento></complemento>
                <logradouro>
                    <nome>{$Propriedade['ds_endereco']}</nome>
                    <cep>" . str_replace('-', '', $Propriedade['ds_endereco_cep']) . "</cep>
                    <bairro>
                        <nome>{$Propriedade['ds_endereco_bairro']}</nome>
                        <localidade>
                            <nome>{$Propriedade['ds_nome_municipio']}</nome>
                            <estado>
                                <nome>{$Propriedade['ds_nome_estado']}</nome>
                                <uf>{$Propriedade['ds_sigla']}</uf>
                            </estado>
                        </localidade>
                    </bairro>
                </logradouro>
                <municipio>
                    <codigo>{$Propriedade['cd_bacen']}</codigo>
                </municipio>
                <utilizacoes>
                    <utilizacao>Residencial</utilizacao>
                </utilizacoes>
        ";

        $stCoordenada = str_replace(" ,", "", $Propriedade['ds_coordenadas']);
        $stCoordenada = str_replace(",", "", $stCoordenada);
        $stCoordenada = str_replace("-", "", $stCoordenada);
        $arCoordenada = explode(" ", $stCoordenada);
        $xml .= "
                <geo>
                    <latitude>
                        <grau>" . $arCoordenada[0] . "</grau>
                        <minuto>" . $arCoordenada[1] . "</minuto>
                        <segundo>" . $arCoordenada[2] . "</segundo>
                        <posicao>S</posicao>
                    </latitude>
                    <longitude>
                        <grau>" . $arCoordenada[3] . "</grau>
                        <minuto>" . $arCoordenada[4] . "</minuto>
                        <segundo>" . $arCoordenada[5] . "</segundo>
                        <posicao>W</posicao>
                    </longitude>
                </geo>
        ";

        //monta o questionario
        foreach ($Questionario as $questionario) {
            if ($questionario['ds_chave_rn'] == 'QUEST_SUBVENCAO_FEDERAL') {
                $perguntas .= "
                        <pergunta>
                        <codigo>101</codigo>
                        <descricao>Deseja aderir ao Programa de Subvenção ao Prêmio de Seguro Rural do Governo Federal?</descricao>
                        <respostas>
                        <resposta>
                        <pontuacao>0.00</pontuacao>";
                if ($Proposta->respostas($questionario['ds_chave_rn']) == 0) {
                    $perguntas .= "
                            <justificativa></justificativa>
                            <descricao>Não</descricao>
                            <codigo>2</codigo>
                            </resposta>
                            </respostas>
                            </pergunta>";
                } else {
                    $perguntas .= "
                            <justificativa>No entanto, se por qualquer motivo não for possívell receber a subvenção, responsabilizo-me pelo pagamento integral do prêmio.</justificativa>
                            <descricao>Sim</descricao>
                            <codigo>1</codigo>
                            </resposta>
                            </respostas>
                            </pergunta>";

                    $QUEST_ZONEAMENTO = '';

                    foreach ($Questionario['QUEST_SUBVENCAO_FEDERAL'][chields] as $questionario_tmp) {
                        if ($questionario_tmp['ds_chave_rn'] == 'QUEST_ZONEAMENTO_UTILIZADO') {
                            switch ($Proposta->respostas($questionario_tmp['ds_chave_rn'])) {
                                case 1:
                                    $QUEST_ZONEAMENTO = 'MAPA';
                                    break;
                                case 2:
                                    $QUEST_ZONEAMENTO = 'EMATER';
                                    break;
                                case 3:
                                    $QUEST_ZONEAMENTO = 'IAC';
                                    break;
                                case 4:
                                    $QUEST_ZONEAMENTO = 'EPAGRI';
                                    break;
                                case 5:
                                    $QUEST_ZONEAMENTO = 'OUTROS';
                                    break;
                            }
                        }
                    }

                    //adiciona a pergunta vinculada
                    $perguntas .= "
                    <pergunta>
                    <codigo>102</codigo>
                    <descricao>Zoneamento Utilizado:</descricao>
                    <respostas>
                    <resposta>
                    <pontuacao>0.00</pontuacao>
                    <justificativa>$QUEST_ZONEAMENTO</justificativa>
                    <descricao></descricao>
                    <codigo>1</codigo>
                    </resposta>
                    </respostas>
                    </pergunta>";
                }
            }

            if ($questionario['ds_chave_rn'] == 'QUEST_SUBVENCAO_ESTADUAL') {
                $perguntas .= "
                        <pergunta>
                        <codigo>108</codigo>
                        <descricao>Deseja aderir ao Programa de Subvenção ao Prêmio de Seguro Rural do Governo Estadual?</descricao>
                        <respostas>
                        <resposta>
                        <pontuacao>0.00</pontuacao>";
                if ($Proposta->respostas($questionario['ds_chave_rn']) == 0) {
                    $perguntas .= "
                            <justificativa></justificativa>
                            <descricao>Não</descricao>
                            <codigo>2</codigo>
                            </resposta>
                            </respostas>
                            </pergunta>";
                } else {
                    $perguntas .= "
                            <justificativa>No entanto, se por qualquer motivo não for possívell receber a subvenção, responsabilizo-me pelo pagamento integral do prêmio.</justificativa>
                            <descricao>Sim</descricao>
                            <codigo>1</codigo>
                            </resposta>
                            </respostas>
                            </pergunta>";

                }
            }

            if ($questionario['ds_chave_rn'] == 'QUEST_DANOS_GRANIZO') {
                $codigo = 2;
                $resposta = 'Não';

                if ($Proposta->respostas($questionario['ds_chave_rn']) != 0) {
                    $codigo = 1;
                    $resposta = 'Sim';
                }

                $perguntas .= "
                <pergunta>
                <codigo>103</codigo>
                <descricao>Há danos de granizo?</descricao>
                <respostas>
                <resposta>
                <pontuacao>0.00</pontuacao>
                <justificativa></justificativa>
                <descricao>$resposta</descricao>
                <codigo>$codigo</codigo>
                </resposta>
                </respostas>
                </pergunta>";
            }

            if ($questionario['ds_chave_rn'] == 'QUEST_AREA_DECLARADA') {
                $codigo = 2;
                $resposta = 'Não';

                if ($Proposta->respostas($questionario['ds_chave_rn']) != 0) {
                    $codigo = 1;
                    $resposta = 'Sim';
                }

                $perguntas .= "
                <pergunta>
                <codigo>103</codigo>
                <descricao>As áreas declaradas nas Unidades Seguradas da proposta representam toda a área cultivada desta cultura na propriedade?</descricao>
                <respostas>
                <resposta>
                <pontuacao>0.00</pontuacao>
                <justificativa></justificativa>
                <descricao>$resposta</descricao>
                <codigo>$codigo</codigo>
                </resposta>
                </respostas>
                </pergunta>";
            }

            if ($questionario['ds_chave_rn'] == 'QUEST_DANOS_OUTROS_EVENTOS') {
                $codigo = 2;
                $resposta = 'Não';

                if ($Proposta->respostas($questionario['ds_chave_rn']) != 0) {
                    $codigo = 1;
                    $resposta = 'Sim';
                }

                $perguntas .= "
                <pergunta>
                <codigo>109</codigo>
                <descricao>Há danos de pelo menos um dos eventos cobertos na safra atual?</descricao>
                <respostas>
                <resposta>
                <pontuacao>0.00</pontuacao>
                <justificativa></justificativa>
                <descricao>$resposta</descricao>
                <codigo>$codigo</codigo>
                </resposta>
                </respostas>
                </pergunta>";
            }

            if ($questionario['ds_chave_rn'] == 'QUEST_OUTRA_LAVOURA') {
                $codigo = 2;
                $resposta = 'Não';

                if ($Proposta->respostas($questionario['ds_chave_rn']) != 0) {
                    $codigo = 1;
                    $resposta = 'Sim';
                }

                $perguntas .= "
                <pergunta>
                <codigo>106</codigo>
                <descricao>O proponente possui outra lavoura/pomar desta cultura no mesmo município?</descricao>
                <respostas>
                <resposta>
                <pontuacao>0.00</pontuacao>
                <justificativa></justificativa>
                <descricao>$resposta</descricao>
                <codigo>$codigo</codigo>
                </resposta>
                </respostas>
                </pergunta>";
            }

            if ($questionario['ds_chave_rn'] == 'QUEST_OUTRO_SEGURO') {
                $codigo = 2;
                $resposta = 'Não';
                $justificativa = '';

                if ($Proposta->respostas($questionario['ds_chave_rn']) != 0) {
                    $codigo = 1;
                    $resposta = 'Sim';

                    foreach ($Questionario as $questionario_tmp) {
                        if ($questionario_tmp['ds_chave_rn'] == 'QUEST_LMGA') {
                            $QUEST_LMGA = $Proposta->respostas($questionario['ds_chave_rn']) ? 'Sim' : 'Não';
                        }
                        if ($questionario_tmp['ds_chave_rn'] == 'QUEST_NUMERO_APOLICE') {
                            $QUEST_NUMERO_APOLICE = $Proposta->respostas($questionario_tmp['ds_chave_rn']) ? 'Sim' : 'Não';
                        }
                        if ($questionario_tmp['ds_chave_rn'] == 'QUEST_SEGURADORA') {
                            $QUEST_SEGURADORA = $Proposta->respostas($questionario_tmp['ds_chave_rn']) ? 'Sim' : 'Não';
                        }
                    }

                    $justificativa = "IS: $QUEST_LMGA - APÓLICE: $QUEST_NUMERO_APOLICE - SEGURADORA - $QUEST_SEGURADORA";
                }

                $perguntas .= "
                <pergunta>
                <codigo>107</codigo>
                <descricao>Há outro seguro sobre a mesma área?</descricao>
                <respostas>
                <resposta>
                <pontuacao>0.00</pontuacao>
                <justificativa>$justificativa</justificativa>
                <descricao>$resposta</descricao>
                <codigo>$codigo</codigo>
                </resposta>
                </respostas>
                </pergunta>";
            }

            if ($questionario['ds_chave_rn'] == 'QUEST_ENQUADRADO_PRONAMP') {

                $codigo = 2;
                $resposta = 'Não';

                if ($Proposta->respostas($questionario['ds_chave_rn']) != 0) {
                    $codigo = 1;
                    $resposta = 'Sim';
                }

                $perguntas .= "
            	<pergunta>
            	<codigo>110</codigo>
            	<descricao>Sou enquadrado no PRONAMP?</descricao>
            	<respostas>
            	<resposta>
            	<pontuacao>0.00</pontuacao>
            	<justificativa></justificativa>
            	<descricao>$resposta</descricao>
            	<codigo>$codigo</codigo>
            	</resposta>
            	</respostas>
            	</pergunta>";
            }

            if ($questionario['ds_chave_rn'] == 'QUEST_PRODUTOR_ORGANICO') {

                $codigo = 2;
                $resposta = 'Não';

                if ($Proposta->respostas($questionario['ds_chave_rn']) != 0) {
                    $codigo = 1;
                    $resposta = 'Sim';
                }

                $perguntas .= "
            	<pergunta>
            	<codigo>111</codigo>
            	<descricao>Sou Produtor ORGÂNICO?</descricao>
            	<respostas>
            	<resposta>
            	<pontuacao>0.00</pontuacao>
            	<justificativa></justificativa>
            	<descricao>$resposta</descricao>
            	<codigo>$codigo</codigo>
            	</resposta>
            	</respostas>
            	</pergunta>";
            }

            if ($questionario['ds_chave_rn'] == 'QUEST_ZONEAMENTO_ENQUADRADO_MAPA') {
                if ($Proposta->respostas($questionario['ds_chave_rn']) == '') {
                    Agro_Db_Table_Abstract::getDefaultAdapter()->query("delete from seguro.propostas_questionario where id_proposta=" . $id_proposta . " and id_atributo_rn=153");

                    switch ($Produto['id_cultura']) {
                        case 6:
                        case 19:
                        case 28:
                        case 43:
                        case 44:
                        case 53:
                        case 55:
                        case 67:
                        case 74:
                        case 75:
                        case 76:
                            $codigo = 2;
                            $resposta = 'Não';
                            Agro_Db_Table_Abstract::getDefaultAdapter()->query("insert into seguro.propostas_questionario (id_proposta, id_atributo_rn, ds_resposta) values (" . $id_proposta . ", 153, '0')");
                            break;

                        case 7:
                        case 11:
                        case 15:
                        case 16:
                        case 25:
                        case 26:
                        case 29:
                        case 36:
                        case 54:
                        case 56:
                        case 58:
                        case 62:
                        case 68:
                        case 69:
                        case 72:
                        case 77:
                        case 80:
                        case 81:
                            $codigo = 1;
                            $resposta = 'Sim';
                            Agro_Db_Table_Abstract::getDefaultAdapter()->query("insert into seguro.propostas_questionario (id_proposta, id_atributo_rn, ds_resposta) values (" . $id_proposta . ", 153, '1')");
                            break;

                        default:
                            $codigo = 1;
                            $resposta = 'Sim';
                            Agro_Db_Table_Abstract::getDefaultAdapter()->query("insert into seguro.propostas_questionario (id_proposta, id_atributo_rn, ds_resposta) values (" . $id_proposta . ", 153, '1')");
                    }

                } else {
                    $codigo = 1;
                    $resposta = 'Sim';

                    if ($Proposta->respostas($questionario['ds_chave_rn']) == '0') {
                        $codigo = 2;
                        $resposta = 'Não';
                    }
                }

                $perguntas .= "
            	<pergunta>
            	<codigo>112</codigo>
            	<descricao>Zoneamento vinculado ao MAPA?</descricao>
            	<respostas>
            	<resposta>
            	<pontuacao>0.00</pontuacao>
            	<justificativa></justificativa>
            	<descricao>$resposta</descricao>
            	<codigo>$codigo</codigo>
            	</resposta>
            	</respostas>
            	</pergunta>";
            }
        }

        $xml .= "
        <questionario>
            <coeficiente>0</coeficiente>
            <perguntas>
                $perguntas
                {$this->getXMLNorteNordeste($Produto['ds_nome_cultura'], $Propriedade['ds_sigla'])}
                {$this->getXMLProgramaABC($Produto['ds_nome_cultura'], $Proponente['cpf_cnpj'])}
            </perguntas>
            <tipoResposta>Alfanumerico</tipoResposta>
        </questionario>
        ";

        $PROD_PRODUCAO_GARANTIDA = false;

        if ($Proposta->atributos('PROPRIEDADE', 'PROD_PRODUCAO_GARANTIDA') != 0) {
            $PROD_PRODUCAO_GARANTIDA = true;
        }

        $countUnidades = 1;

        if ($temPropostaOriginal && ($tp_endosso != 'SEM_MOVIMENTO')) {
            $valoresXmlEssor = $this->valoresEndosso($Proposta, $PropostaOriginal, $tp_endosso, $valorParaDistribuir);
        }

        $tipoEndossoCobrancaOuReducao = $tp_endosso == 'COBRANCA' || $tp_endosso == 'REDUCAO';
        $valorCalculado = 0;

        foreach ($Proposta->unidades(false) as $item) {
            $inCodFranquia = 0;
            unset($coberturas);

            if ($tipoEndossoCobrancaOuReducao) {
                $idProposta = $valorBasePremioCalculoCoberturas > 0 ? $Proposta->id : $Proposta->id_proposta_endossada;
                $vl_lmga_endossada = $Proposta->lmga_item_endossado($idProposta, $item['IS_ITEM']);

                if ($valorBasePremioCalculoCoberturas > 0) {
                    $porcentagemLmga = (($vl_lmga_endossada * 100) / $lmga);
                    $valorProporcionalPremio = $valorBasePremioCalculoCoberturas * ($porcentagemLmga / 100);
                    $valorPorCoberturaNovaItem = number_format($valorProporcionalPremio / count($Coberturas->toArray()), 2, '.', '');

                    if (count($coberturasNovas) > 0) {
                        $valorPorCoberturaNovaItem = round($valorProporcionalPremio / count($coberturasNovas), 2);
                    }
                }
            }


            foreach ($Coberturas as $cobertura) {
                if ($tipoEndossoCobrancaOuReducao) {
                    $idProposta = $valorBasePremioCalculoCoberturas > 0 ? $Proposta->id : $Proposta->id_proposta_endossada;
                    $vl_taxa_endossada = $Proposta->taxa_cobertura_endossada($idProposta, $cobertura->id_cobertura);
                }

                if ($cobertura->fl_principal) {
                    if ($PROD_PRODUCAO_GARANTIDA) {
                        //Codigo de acordo com o Nivel de cobertura (Franquia principal da proposta)
                        switch ($cobertura->vl_franquia) {
                            case '50.00':
                                $codigo = 1;
                                break;
                            case '55.00':
                                $codigo = 2;
                                break;
                            case '60.00':
                                $codigo = 3;
                                break;
                            case '65.00':
                                $codigo = 4;
                                break;
                            case '70.00':
                                $codigo = 5;
                                break;
                            case '75.00':
                                $codigo = 6;
                                break;
                            case '80.00':
                                $codigo = 7;
                                break;
                            default:
                                $codigo = 0;
                                break;
                        }
                    }
                }

                $coberturas .= "
                    <codigoitem>{$item['IS_ITEM']}</codigoitem>
                    <cobertura>
                        <codigo>". Produto_Model_ProdutosCoberturas::deParaI4Pro($id_proposta, $cobertura->cd_cobertura_seguradora) ."</codigo>
                        <indicadorFacultativa>".($cobertura->fl_principal ? 'false' : 'true')."</indicadorFacultativa>
                        <indicadorGratuita>".($cobertura->vl_taxa == 0 ? 'true' : 'false'). "</indicadorGratuita>
                        <verbas>
                            <verba>
                                <codigo>100</codigo>
                                <IsContratada>true</IsContratada>
                                <franquia>";

                if ($PROD_PRODUCAO_GARANTIDA) {
                    if ($cobertura->id_cobertura == 5 || $cobertura->id_cobertura == 16 || $cobertura->id_cobertura == 11 || $cobertura->id_cobertura == 29 || $cobertura->id_cobertura == 30 || $cobertura->id_cobertura == 31) {
                        $cobertura->vl_franquia = 0;
                    }

                    $coberturas .= "
   	                                	<codigo>1</codigo>
       	                            	<valor>$cobertura->vl_franquia</valor>
           	                        ";
                } else {
                    switch ($cobertura->vl_franquia) {
                        case 0 :
                            $inCodFranquia = 1;
                            break;
                        case 5 :
                            $inCodFranquia = 2;
                            break;
                        case 10:
                            $inCodFranquia = 3;
                            break;
                        case 15:
                            $inCodFranquia = 4;
                            break;
                        case 20:
                            $inCodFranquia = 5;
                            break;
                        case 25:
                            $inCodFranquia = 6;
                            break;
                        case 30:
                            $inCodFranquia = 7;
                            break;
                        case 35:
                            $inCodFranquia = 8;
                            break;
                        case 40:
                            $inCodFranquia = 9;
                            break;
                    }

                    if ($cobertura->id_cobertura == 15 || $cobertura->id_cobertura == 16 || $cobertura->id_cobertura == 11 || $cobertura->id_cobertura == 5) {
                        $inCodFranquia = 1;
                        $cobertura->vl_franquia = 0;
                    }

                    $coberturas .= "
                                    <codigo>$inCodFranquia</codigo>
                                    <valor>$cobertura->vl_franquia</valor>
                                    ";
                }

                $coberturas .= "
                                    <tabela>
                                        <codigo>100</codigo>
                                        <tipo>FQ</tipo>
                                    </tabela>
                                </franquia>
                            <importanciaSegurada>";

                if ($cobertura->fl_principal) {
                    $coberturas .= "<valor>" . number_format($item['IS_LMGA_PARCIAL'], 2, '.', '') . "</valor>";
                } else {
                    if ($cobertura->id_cobertura == 16) {
                        if ($item['IS_LMGA_PARCIAL'] > 0) {
                            $valor = $item['IS_AREA'] * 100;
                            $valor = number_format($valor, 2, '.', '');
                        } else {
                            $valor = 0;
                        }
                    } else {
                        $valor = ($item['IS_LMGA_PARCIAL'] * $cobertura->vl_lmi) / 100;
                        $valor = number_format($valor, 2, '.', '');
                    }
                    $coberturas .= "<valor>$valor</valor>";
                }

                if ($tp_endosso == 'SEM_MOVIMENTO') {
                    $valor = '0.00';
                    $percentualCarregamento = '0.00';
                }

                $valor = Agro_Util::round((($item['IS_LMGA_PARCIAL'] * $cobertura->vl_taxa) / 100), 2);
                $arredondou = false;

                if ($tipoEndossoCobrancaOuReducao) {
                    if (($valorPremioParcelas > 0 || $valorTotal > 0) && ($premioLiquido == $premioLiquidoPropostaOriginal)) {
                        $valorPremioParcelas = $valorPremioParcelas ? $valorPremioParcelas : $valorTotal;

                        $valor_endosso = Agro_Util::round((($item['IS_LMGA_PARCIAL'] * $cobertura->vl_taxa) / 100), 2);

                        $percentual_premio = round($valor_endosso / ($premioLiquido > 0 ? $premioLiquido : $valorPremioParcelas), 2);

                        $valorPremioItemCobertura = round(($valorPremioParcelas * $percentual_premio), 2);

                        $valorPremioItemCoberturaAcumulado += $valorPremioItemCobertura;

                        if ($countUnidades == ($Proposta->unidades(true) * count($Coberturas))) {
                            $diff = round($valorPremioItemCoberturaAcumulado - $valorPremioParcelas, 2);

                            if ($diff == 0) {
                                $diff = round($valorPremioItemCoberturaAcumulado - $valorTotal, 2);
                            }

                            if ($diff > 0 || $diff < 0) {
                                $valorPremioItemCobertura -= $diff;
                                $arredondou = true; //flag para não tirar o negativo no final, para ajustar a diferença
                            }
                        }

                        $valor = $valorPremioItemCobertura;
                        $countUnidades++;
                    } else {
                        if ($vl_taxa_endossada > 0 && $vl_lmga_endossada > 0) {
                            $valor_endosso = Agro_Util::round((($vl_lmga_endossada * $vl_taxa_endossada) / 100), 2);
                            $valor = $valor - $valor_endosso;

                            if (abs($valor) == abs($valor_endosso)) {
                                $valor = 0.00;
                                $percentualCarregamento = '0.00';
                            }
                        }

                        $valorPremioItemCoberturaAcumulado += $valor;

                        if ($countUnidades == ($Proposta->unidades(true) * count($Coberturas))) {
                            $diff = round($valorPremioItemCoberturaAcumulado - $valorTotalAcumulado, 2);

                            if ($diff > 0) {
                                $valor -= $diff;
                            }
                        }
                        $countUnidades++;
                    }
                }

                $valor = number_format(($arredondou ? $valor : abs($valor)), 2, '.', '');

                // :( :( :( :( ME DESCULPE POR ESSE LIXO DE CODIGO, SOU UM BOM PROGRAMADOR, JURO
                //EXISTEM INÚMEROS CALCULOS ACIMA QUE, PARA A VARIÁVEL VALOR ESTÃO SENDO DESCONSIDERADOS.
                //ESSA GAMBI FOI NECESSÁRIA EM FUNÇÃO DE UMA ATUALIZAÇÃO DE REGRAS DA ESSOR NÃO
                //INFORMADAS PREVIAMENTE PARA A AGROBRASIL. DEVIDO INÚMEROS ENDOSSOS (COM PRO-RATA) SENDO
                //ACUMULADOS, FOI NECESSÁRIO ESSE LIXO.
                //EM BREVE, ESSE MONTE DE CÁLCULOS ACIMA, SERÁ REMOVIDO JURO! :( :( :(
                if ($temPropostaOriginal) {
                    $valor = round($valoresXmlEssor[$item['ID']][$cobertura->id_cobertura], 2);
                    $valorTotalAcc += $valor;

                    if ($countUnidades - 1 == ($Proposta->unidades(true) * count($Coberturas))) {
                        if (isset($valorPremioParcelas)) {
                            $difference = $valorPremioParcelas - $valorTotalAcc;
                        } else {
                            $difference = $valorLiquido - $valorTotalAcc;
                        }

                        if ($difference > 0 || $difference < 0) {
                            $valor += round($difference, 2);
                        }
                    }
                }

                if ($tipoEndossoCobrancaOuReducao && $valorBasePremioCalculoCoberturas > 0) {
                    if (count($coberturasNovas) > 0) {
                        $valor = 0;

                        if (array_key_exists($cobertura['id_cobertura'], $coberturasNovas)) {
                            $valor = $valorPorCoberturaNovaItem;
                        }
                    } else {
                        $valor = $valorPorCoberturaNovaItem;
                    }

                    $valorCalculado += $valor;

                    if ($countUnidades - 1 == ($Proposta->unidades(true) * count($Coberturas))) {
                        $difference = $valorBasePremioCalculoCoberturas - $valorCalculado;

                        if ($difference > 0 || $difference < 0) {
                            $valor += number_format($difference, 2, '.', '');
                        }
                    }
                }

                $coberturas .= "
                                <taxa>{$cobertura->vl_taxa}</taxa>
                            </importanciaSegurada>

                            <premio>
                                <valorTarifario>" . ($valor > 0 ? $valor : '0.00') . "</valorTarifario>
                                <valorLiquido>" . ($valor > 0 ? $valor : '0.00') . "</valorLiquido>
                                <valorTotal>" . ($valor > 0 ? $valor : '0.00') . "</valorTotal>
                                <percentualDesconto>0.00</percentualDesconto>
                                <percentualAgravamento>0</percentualAgravamento>
                                <valorDesconto>0.00</valorDesconto>
                                <valorAgravamento>0</valorAgravamento>
                                <percentualCarregamento>$percentualCarregamento</percentualCarregamento>
                                <taxaComercial>" . ($cobertura->vl_taxa ? $cobertura->vl_taxa : 0) . "</taxaComercial>
                                <taxaPura>" . ($cobertura->vl_taxa ? $cobertura->vl_taxa : 0) . "</taxaPura>
                            </premio>
                        </verba>
                    </verbas>
                <valorPremioBasico>0</valorPremioBasico>
                </cobertura>";
            }

            $xmlItem .= "<item xsi:type=\"ItemAgricola\">";
            if ($item['IS_NRO_PLANTAS_M_LINEAR']) {
                $xmlItem .= "<numeroSementeLinear>{$item['IS_NRO_PLANTAS_M_LINEAR']}</numeroSementeLinear>";
            }
            if ($PROD_PRODUCAO_GARANTIDA) {
                $xmlItem .= "<produtividadeGarantida>{$item['IS_PRODUCAO_GARANTIDA']}</produtividadeGarantida>";
                $xmlItem .= "<nivelCobertura><codigo>$codigo</codigo></nivelCobertura>";
            } else {
                $xmlItem .= "<produtividadeGarantida>{$item['IS_PRODUTIVIDADE']}</produtividadeGarantida>";
            }

            $xmlItem .= "
            <codigo>{$item['IS_ITEM']}</codigo>
            <descricao>{$item['IS_DESCRICAO_ITEM']}</descricao>
            <tipo>Agricola</tipo>
            <vl_paf>{$item['IS_PEQUENA_AREA_FORRAGEIRA']}</vl_paf>
            <vl_segurado_ha>" . ($item['IS_VALOR_CUSTEIO'] ? $item['IS_VALOR_CUSTEIO'] : 0) . "</vl_segurado_ha>";

            $xmlItem .= "<coberturas>$coberturas</coberturas>";

            $xmlItem .= $this->croquiXml($id_proposta, $item, $PropostaOriginal->id_proposta_mae);

            $xmlItem .= "
            <vigencia>
            <tipo>Anual</tipo>
            <dataInicio>{$dataInicioVigencia}</dataInicio>
                    <dataFim>" . substr($Proposta->dt_vigencia_fim, 0, 10) . "</dataFim>
                            </vigencia>";

            $is_valor_tonelada = str_replace(".", "", $item['IS_VALOR_TONELADA']);
            $is_valor_tonelada = str_replace(",", ".", $is_valor_tonelada);

            $xmlItem .= "
                    <idade>" . ($item['IS_IDADE'] ? $item['IS_IDADE'] : 0) . "</idade>
                    <area>" . ($item['IS_AREA'] ? $item['IS_AREA'] : 0) . "</area>
                    <valorTonelada>" . ($is_valor_tonelada ? $is_valor_tonelada : 0) . "</valorTonelada>
                    <valorRedimentoTonelada>" . ($is_valor_tonelada ? $is_valor_tonelada : 0) . "</valorRedimentoTonelada>
                    <valorRendimentoEstimado>" . ($item['IS_PRODUTIVIDADE'] ? $item['IS_PRODUTIVIDADE'] : 0) . "</valorRendimentoEstimado>
                    <valorToneladaCultura>" . ($is_valor_tonelada ? $is_valor_tonelada : 0) . "</valorToneladaCultura>
            ";
            /*
             * Para ser incluído posteriormente - solicitação 3837
             *
                    <valorCusteio>" . ($item['IS_VALOR_CUSTEIO'] ? $item['IS_VALOR_CUSTEIO'] : 0) . "</valorCusteio>
                    <precoBase></precoBase>
                    <faturamentoEsperado></faturamentoEsperado>
             */
            if ($item['IS_VALOR_TONELADA'] > 0 && $item['IS_PRODUTIVIDADE'] > 0) {
                $indicador = 'true';
            } else {
                $indicador = 'false';
            }
            if ($item['IS_ESPACAMENTO_SIMPLES']) {
                $espacamento = $item['IS_ESPACAMENTO_SIMPLES'];
            } else {
                $espacamento = $item['IS_ESPACAMENTO_COMPOSTO'][0] . "X" . $item['IS_ESPACAMENTO_COMPOSTO'][1];
            }

            $xmlItem .= "
            <indicadorCobertura>$indicador</indicadorCobertura>
            <descricao></descricao>
            <espacamento>{$espacamento}</espacamento>";

            if ($item['IS_IDADE_TELA']) {
                $xmlItem .= "<idadeTela >{$item['IS_IDADE_TELA']}</idadeTela >";
            }
            if ($item['IS_DATA_SEMEADURA']) {
                $xmlItem .= "<dataSemeadura>" . $this->formataData($item['IS_DATA_SEMEADURA']) . "</dataSemeadura>";
            }
            if ($item['IS_DATA_PLANTIO_TRANSPLANTE']) {
                $xmlItem .= "<dataPlantio >{$this->formataData($item['IS_DATA_PLANTIO_TRANSPLANTE'])}</dataPlantio >";
            }
            if ($item['IS_DATA_PODA']) {
                $xmlItem .= "<dataPoda >{$this->formataData($item['IS_DATA_PODA'])}</dataPoda >";
            }

            if ($item['IS_PORTAENXERTO']) {
                $xmlItem .= "<portaEnxerto><codigo>{$item['IS_PORTAENXERTO']}</codigo></portaEnxerto>";
            }

            if ($item['IS_PRODUCAO_MINIMA']) {
                $xmlItem .= "
                <numeroFrutoGarantido>{$item['IS_PRODUCAO_MINIMA']}</numeroFrutoGarantido>";
            }

            if ($item['IS_TIPO_CONDUCAO']) {
                $valor = 'Latada';
                if ($item['IS_TIPO_CONDUCAO'] == 'E') {
                    $valor = 'Espaldeira';
                }

                if ($item['IS_TIPO_CONDUCAO'] == 'Y') {
                    $valor = 'Sistema Y';
                }
                $xmlItem .= "<sistemaConducao >$valor</sistemaConducao >";
            }

            $cd_variedade_seguradora = $RowProduto->produto_variedade_seguradora($item['IS_VARIEDADES']);

            $xmlItem .= "
            <cultura>
                <codigo>{$Produto['cd_bacen']}</codigo>
                <nome>{$Produto['ds_nome_cultura']}</nome>
                <codigoSubCultura>" . ($Produto['cd_cultura_seguradora_2'] ? $Produto['cd_cultura_seguradora_2'] : '0') . "</codigoSubCultura>
                <variedade>
                    <codigo>{$cd_variedade_seguradora}</codigo>
                    <nome>{$item['IS_NOME_VARIEDADES']}</nome>";
            if ($item['CD_CICLO_SEGURADORA']) {
                $xmlItem .= "<ciclo><codigo>{$item['CD_CICLO_SEGURADORA']}</codigo></ciclo>";
            }
            $xmlItem .= "
                </variedade>
            </cultura>";

            $xmlItem .= "</item>";
        }

        $xml .= "<itens>$xmlItem</itens>

        </local>

        </locais>";

        if (is_array($Beneficiarios)) {
            $xml .= "<beneficiarios>";

            foreach ($Beneficiarios as $beneficiario) {
                if ($beneficiario['vl_limite_beneficio'] > 0) {
                    $nuBenefPercentual = round(($beneficiario['vl_limite_beneficio'] * 100) / $Proposta->lmga(), 6);
                    if ($nuBenefPercentual > 100) {
                        $nuBenefPercentual = 100;
                    }
                    if ($beneficiario['ds_tipo_conta'] == 's') {
                        $stBenefNome = $beneficiario['ds_nome_banco'];
                    } else {
                        $stBenefNome = str_replace("&", "E", $beneficiario['ds_nome_beneficiarios']);
                    }
                    $cpf_cnpj_benef = str_replace('.', '', str_replace('/', '', str_replace('-', '', $beneficiario['nr_cpf_cnpj'])));
                    $tp_pessoa = ($beneficiario['tp_pessoa'] == 'J') ? 'Juridica' : 'Fisica';
                    $dsNomeSocial = !empty($beneficiario['ds_nome_social']) ? $beneficiario['ds_nome_social'] : null;

                    $xml .= '
                            <beneficiario>
                            <percentualParticipacao>' . $nuBenefPercentual . '</percentualParticipacao>
                            <tipo>' . $tp_pessoa . '</tipo>
                            <nome>' . $stBenefNome . '</nome>
                            <nm_pessoa_social>' . $dsNomeSocial . '</nm_pessoa_social>
                                <detalhe xsi:type="DetalhePessoa' . $tp_pessoa . '">';
                    if ($tp_pessoa == "Juridica") {
                        $xml .= '
                                    <cnpj>' . $cpf_cnpj_benef . '</cnpj>
                                    <nomeFantasia>' . $stBenefNome . '</nomeFantasia>';
                    } else {
                        $xml .= '
                                    <cpf>' . $cpf_cnpj_benef . '</cpf>
                                    <nome>' . $stBenefNome . '</nome>';
                    }
                    $xml .= '
                                </detalhe>
                            </beneficiario>';
                }
            }

            $xml .= "</beneficiarios>";
        }

        $xml .= "
                </propostaSeguroAgricola>
            </EnviarPropostaSeguroAgricola>";
        
        return $xml;
    }

    /*
    * Monta XML das coordenadas do croqui
    */
    private function croquiXml(int $idProposta, array $it, ?int $idPropostaMae=null) : string {
        $i = 1;
        $talhoes = '';

        $modelPropostasCroquisTalhoes = new Seguro_Model_PropostasCroquisTalhoes();

        //busca croqui da proposta atual
        //if (!empty($idPropostaMae) && ($idProposta !== $idPropostaMae)) {
            $talhoes = $modelPropostasCroquisTalhoes->getByCroquiIdItemSegurado($idProposta, $it['ID']);
        //}

        if ((count($talhoes)<=0) && ($idPropostaMae)) {
            //busca croqui da solicitacao mais atual que tenha croqui e foi finalizada
            $talhoes = $modelPropostasCroquisTalhoes->getByCroquiIdItemSeguradoSolicitacao($idPropostaMae, $it['IS_DESCRICAO_ITEM']);
        }

        /*if (count($talhoes)<=0) {
            //busca coordenada do primeiro item que encontrar na solicitacao pois é um item novo e não tem coordenada
            $talhoes = (new Seguro_Model_PropostasCroquisTalhoes())->getByCroquiIdItemSeguradoSolicitacaoByItem($idPropostaMae, $it['IS_ITEM']);
        }*/

        if (empty($talhoes) && ($idPropostaMae)) {
            $talhoes = $modelPropostasCroquisTalhoes->getByDsItemSegurado($idPropostaMae, $it['IS_DESCRICAO_ITEM']);
        }

        if ((count($talhoes)<=0) && ($idPropostaMae)) {
            //busca croqui da proposta mae
            $talhoes = $modelPropostasCroquisTalhoes->getByCroquiIdItemSegurado($idPropostaMae);
        }

        /*if (count($talhoes)<=0) {
            //busca croqui do primeiro item que achar pois é um item novo e não tem coordenadas (previa)
            $talhoes = (new Seguro_Model_PropostasCroquisTalhoes())->getByCroquiIdItemSegurado($idPropostaMae, $it['IS_ITEM'], true);
        }*/

        $return = '<listaCoordenadas>';

        foreach($talhoes as $talhao) {

            $return .= '<coordenadas><nr_poligono>'.$i.'</nr_poligono>';

            $coords = json_decode($talhao['ds_coordenadas'], true);

            foreach($coords as $idx => $point) {
                $lat = explode(' ',Agro_Util::dec2gms($point['latitude']));
                $lon = explode(' ',Agro_Util::dec2gms($point['longitude']));
                
                $return .= " 
                        <coordenada>
                            <NrGrauLatitude>".abs($lat[0])."</NrGrauLatitude>
                            <NrMinutoLatitude>$lat[1]</NrMinutoLatitude>
                            <NrSegundoLatitude>$lat[2]</NrSegundoLatitude>
                            <CsOrientacaoLatitude>S</CsOrientacaoLatitude>
                            <NrGrauLongitude>".abs($lon[0])."</NrGrauLongitude>
                            <NrMinutoLongitude>$lon[1]</NrMinutoLongitude>
                            <NrSegundoLongitude>$lon[2]</NrSegundoLongitude>
                            <CsOrientacaoLongitude>W</CsOrientacaoLongitude>
                        </coordenada>";
            }

            $return .= '</coordenadas>';
            $i++;
        }

        $return .= '</listaCoordenadas>';
        return $return;
    }

    public function formataData( $dtData ){
        $arData = explode( "-", $dtData );
        if( strlen($arData[0]) == 4 ){
            return $dtData;
        }

        $dia = substr( $dtData, 0, 2 );
        $mes = substr( $dtData, 3, 2 );
        $ano = substr( $dtData, 6, 4 );
        $dtDataFormatada = $ano.'-'.$mes.'-'.$dia;
        return $dtDataFormatada;
    }

    private function calculaComissao($comissao, $comissao_assessoria) {
        $corr = $comissao - $comissao_assessoria;
        return ($corr / $comissao) * 100;
    }

    // ajusta os valores dos itens para enviar para a Essor
    private function valoresEndosso(Object $endosso, Object $proposta, String $tipo_endosso, float $premio) : array {
        $result = array();
        $it_endosso = $endosso->unidades(false);
        $it_proposta = $proposta->unidades(false);
        $coberturas = $this->getPercentualPremioPorCobertura($endosso);
        $newItens = $this->getNovosItens($it_proposta, $it_endosso);
        $i=1;

        //se tem itens novos recupera os novos itens
        if ($tipo_endosso == 'COBRANCA') {
            $diferenteISItens = $this->getISMaior($it_proposta, $it_endosso);
            if (count($it_endosso) != count($it_proposta)) {
                if (count($diferenteISItens)>0){
                    $merge = $this->array_union($diferenteISItens,$newItens);
                    $result = $this->formulaD($merge, $premio, $coberturas);
                } else {
                    $result = $this->formulaB($newItens, $this->sumISItens($newItens), $premio, $coberturas);
                }
            } else {
		        $merge = $this->array_union($diferenteISItens,$newItens);
	    	    if (count($merge)>0) {
	                $result = $this->formulaD($merge, $premio, $coberturas);
		        } else {
		            $result = $this->formulaE($endosso, $it_endosso, $premio);
    		    }
            }
        } elseif ($tipo_endosso == 'REDUCAO') {
            $diferenteISItens = $this->getISMenor($it_proposta, $it_endosso);
            if (count($it_endosso) == count($it_proposta)) {
                if (count($diferenteISItens)>0) {
                    $result = $this->formulaD($diferenteISItens, $premio, $coberturas);
                } else {
                    $result = $this->formulaA($it_endosso, $this->sumISItens($it_endosso), $premio, $coberturas);
                }
            } else {
		        $merge = $this->array_union($diferenteISItens, $newItens);
               
		        if (count($merge)>0) {
		            $result = $this->formulaD($merge, $premio, $coberturas);
		        } else {
		            $result = $this->formulaE($endosso, $it_endosso, $premio);
		        }
            }
        }
        return $result;
    }

    private function formulaA(array $it, float $is, float $premio, array $cobs) : array {
	$result = array();

        foreach ($it as $i) {
            foreach ($cobs as $k => $v) {
                $res = (($i['IS_LMGA_PARCIAL'] / $is) * $premio) * $v;
                $result[$i['ID']][$k] = round($res, 2);
            }

        }
        return $result;
    }

    private function array_union(array $a, array $b) : array {
        $result = array();
        $idx=0;

        foreach ($a as $linha) {
            array_push($result, $linha);
        }

        foreach ($b as $linha) {
            array_push($result, $linha);
        }

        for ($i=0; $i<=count($result); $i++) {
            if(!isset($result[$i]['IS_LMGA_PARCIAL_OLD'])){
                $result[$idx]['IS_LMGA_PARCIAL'] += $result[$i]['IS_LMGA_PARCIAL'];
                unset($result[$i]['IS_LMGA_PARCIAL']); 
            } else {
                $idx=$i;
            }
        }
        
        return $result;
    }

    private function formulaD(array $it, float $premio, array $cobs) : array {
        $result = array();
        $sum_is_old = $this->sumISItens($it, true);
        $sum_is = $this->sumISItens($it);
        
        foreach ($it as $i) { 
            foreach ($cobs as $k => $v) {
                $res = ((abs($i['IS_LMGA_PARCIAL']-$i['IS_LMGA_PARCIAL_OLD']) / abs($sum_is-$sum_is_old)) * $premio) * $v;
                $result[$i['ID']][$k] = abs(round($res, 2));
            }
        }

        return $result;
    }

    private function formulaE(Object $prop, array $it, float $parcela) : array {
	    $result = array();
	    $pl = $prop->premio_liquido();
	    $cobs = $prop->valoresCoberturas();
        
        foreach ($it as $i) { 
	        foreach ($cobs as $cob) {
    	        $res = (($i['IS_LMGA_PARCIAL'] * ($cob['vl_taxa'] / 100)) / $pl) * abs($parcela);
	    	    $result[$i['ID']][$cob['id_cobertura']] = round($res, 2);
	        }
	    }

	    return $result;
    }

    private function formulaB(array $it, float $is, float $premio, array $cobs) : array {
        $result = array();

        foreach ($it as $i) {
    		foreach ($cobs as $k => $v) { 
                $res = (($premio * $i['IS_LMGA_PARCIAL']) / $is) * $v;
                $result[$i['ID']][$k] = round($res, 2);
            }
        }

        return $result;
    }

    // recupera o percentual de cada cobertura no prêmio
    private function getPercentualPremioPorCobertura(Object $proposta) : array {
	    $somatorio = 0;
        $pt = $proposta->premio_liquido();
        foreach ($proposta->valoresCoberturas() as $cob) {
		$result[$cob->id_cobertura] = ($pt > 0 ? round($cob->vl_premio / $pt, 5) : 0);
		$somatorio += $result[$cob->id_cobertura];
	}

	$diff = $somatorio - 1;
	if ($diff < 0) $result[$cob->id_cobertura] += abs($diff); 
       	if ($diff > 0) $result[$cob->id_cobertura] -= $diff;

        return $result;
    }

    //retorna um array só com os itens novos
    private function getNovosItens(array $p, array $e) : array {
        $result = array();
        $limit = count($e) - count($p);

        for ($i=count($p)+1; $i<=count($e); $i++) {
            $result[] = $e[$i];
        }

        return $result;
    }

    //recupera os itens com IS menor 
    private function getISMenor(array $p, array $e) :? array {
        $result = array();
        reset($p);
        reset($e);
        $i=1;
        
        foreach ($p as $it) {
            if ($it['IS_ITEM'] == $e[$i]['IS_ITEM']) {
                if ($it['IS_LMGA_PARCIAL']  > $e[$i]['IS_LMGA_PARCIAL']) {
                    $e[$i]['IS_LMGA_PARCIAL_OLD'] = $it['IS_LMGA_PARCIAL'];
                    $result[] = $e[$i];
                }
            }
            $i++;
        }
        return $result;
    }

    //recupera os itens com IS maiores
    private function getISMaior(array $p, array $e) :? array {
        $result = array();
        reset($p);
        reset($e);
        $i=1;
        
        foreach ($p as $it) {
            if ($it['IS_ITEM'] == $e[$i]['IS_ITEM']) {
                if ($it['IS_LMGA_PARCIAL'] < $e[$i]['IS_LMGA_PARCIAL']) {
                    $e[$i]['IS_LMGA_PARCIAL_OLD'] = $it['IS_LMGA_PARCIAL'];
                    $result[] = $e[$i];
                }
            }
            $i++;
        }

        return $result;
    }

    //recupera os itens com IS diferente
    private function getISDiferente(array $p, array $e) :? array {
        $result = array();
        $i = 1;

        foreach ($p as $it) {
            if ($it['IS_ITEM'] == $e[$i]['IS_ITEM']) {
                if (($it['IS_LMGA_PARCIAL'] != $e[$i]['IS_LMGA_PARCIAL']) && ($it['IS_LMGA_PARCIAL'] > 0) && ($e[$i]['IS_LMGA_PARCIAL'] > 0)) {
                    $e[$i]['IS_LMGA_PARCIAL_OLD'] = $it['IS_LMGA_PARCIAL'];
                    $result[] = $e[$i];
                }
            }
        }
        return $result;
    }

    //soma as IS dos itens no array passado
    private function sumISItens(array $it, bool $is_old=false) : float {
        $result = null;

        foreach ($it as $i) {
            if ($is_old == true) {
                $result += $i['IS_LMGA_PARCIAL_OLD'];
            } else {
                $result += $i['IS_LMGA_PARCIAL'];
            }
        }

        return $result;
    }
    private function calculaComissaoAgro(float $comissao, float $valor) : float {
        return (($comissao * ($valor/100))/($comissao + $this->_COAGRO)) * 100;
    }

    private function getXMLAgroParticipante(float $percent) : string {
        $AgroBrasil = (new Sistema_Model_Empresas())->fetchRow("id = 20");

        return "<participante>
                    <lider>0</lider>
                    <percentualParticipacao>$percent</percentualParticipacao>
                    <tipo>Juridica</tipo>
                    <cd_tp_comissao>3</cd_tp_comissao>
                    <detalhe xsi:type=\"DetalhePessoaJuridica\">
                        <cnpj>".str_replace('-','',str_replace('/','',str_replace('.','',$AgroBrasil->cpf_cnpj)))."</cnpj>
                        <nomeFantasia>".$AgroBrasil->ds_razao_social."</nomeFantasia>
                    </detalhe>
                    <inspetor>
                        <codigo>1854</codigo>
                    </inspetor>
        </participante>";
    }

    /**
     * Monta XML para questao do programa ABC (RENOVAGRO)
     * Essa resposta e automatica nao disponibilizada para o proponente
     * por isso nao existe uma entrada dela no questionario
     */
    private function getXMLProgramaABC(string $dsCultura, string $cpf_cnpj) : string {
        $pontuacao = 0;
        $descricao = 'Não';
        $codigo = 0;

        if ((new Seguro_Model_ProponentesAbc())->existsCpfCnpj($cpf_cnpj)) {
            $pontuacao = strtoupper($dsCultura) == 'SOJA' ? 25 : 45;
            $descricao = 'Sim';
            $codigo = 2;
        }

        return "<pergunta>
                    <codigo>114</codigo>
                    <descricao>Proponente participa do programa RENOVAGRO?</descricao>
                    <respostas>
                        <resposta>
			    <pontuacao>{$pontuacao}</pontuacao>
			    <justificativa></justificativa>
                            <descricao>{$descricao}</descricao>
                            <codigo>{$codigo}</codigo>
                        </resposta>
                    </respostas>
                </pergunta>";
    }


    /**
     * Monta XML para questao da regiao Norte/Nordeste
     * Essa resposta e automatica nao disponibilizada para o proponente
     * por isso nao existe uma entrada dela no questionario
     */
    private function getXMLNorteNordeste(string $dsCultura, string $uf) : string {
        $regioes = ['AC','AP','AM','PA','RO','RR','TO','AL','BA','CE','MA','PB','PE','PI','RN','SE'];
        $pontuacao = 0;
        $descricao = 'Não';
        $codigo = 0;

        if (in_array($uf, $regioes)) {
            $pontuacao = strtoupper($dsCultura) == 'SOJA' ? 30 : 45;
            $codigo = $pontuacao == 30 ? 1 : 2;
            $descricao = 'Sim';
        }

        return "<pergunta>
                    <codigo>113</codigo>
                    <descricao>Propriedade pertence a região Norte ou Nordeste?</descricao>
                    <respostas>
                        <resposta>
			    <pontuacao>{$pontuacao}</pontuacao>
			    <justificativa></justificativa>
                            <descricao>{$descricao}</descricao>
                            <codigo>{$codigo}</codigo>
                        </resposta>
                    </respostas>
                </pergunta>";
    }

}
