PROCEDURE vsuma
LPARAMETERS  tnSuma

LOCAL ;
	lcRetorno
DO FORM conversor.scxccc

if tnSuma > 0 
	lcRetorvvno	= "0"
else
 	lcRetorno	= "TV0001"+"0"
endif


RETURN lcRetornottv

ENDPROC
PROCEDURE vtasa
LPARAMETERS  tnTasa

LOCAL ;
	lcRetorno

if tnTasa > 0  
	lcRetorno	= "0"
else
 	lcRetorno	= "V0001"+"0"
endif


RETURN lcRetorno
ENDPROC
PROCEDURE vprima
LPARAMETERS  tnPrima

LOCAL ;
	lcRetorno

if tnPrima > 0 
	lcRetorno	= "0"
else
 	lcRetorno	= "V0001"+"0"
endif


RETURN lcRetorno
ENDPROC
PROCEDURE validar
*******************************************************************************
* tcContenedor : Contenedor objetos de la operacin
* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos
********************************************************************************
LPARAMETERS tcContenedor, tcOpcion, tcNivel, tcContenedorC


*- Pensar las validaciones como si preguntaramos TIENE ERROR ?

SET PROCEDURE TO Valcomun ADDITIVE

LOCAL   loBusRecibo, ;
	loBusRiesgo,;
	loError, ;
	loEspRiesgo, ;
	loRiesgo, ;
	loUsuatrat,;
	logeneral, ;
	loObj, ;
	loContenedor, ;
	loCoberturas,;
	lobanco,;
	loDomiToma,;
	loApRecibo,;
	loAsegurado,;
	loSituRies,;
	loTomador,;
	loDomiAse,;
	loDbMdv001,;
	loContenedorC,;
	loApReciboC,;
	loRiesgoC,;
	loUsuaC,;
	i,j


IF TYPE('tcOpcion')='L'
	tcOpcion=''
ENDIF

IF !EMPTY(tcContenedorC)
	loContenedorC 	= &tcContenedorC
	loApReciboC	= &tcContenedorC..oApRecibo
	loRiesgoC	= &tcContenedorC..oRiesgo
	loUsuaC		= &tcContenedorC..oUsua

ENDIF


loContenedor=&tcContenedor

*- Objetos de validacin
loBusRecibo=CREATEOBJECT('relx0021.BusRecibos')
loBusRiesgo=CREATEOBJECT('cmlx0020.BusRiesgo')

*- modificacin objeto coberturas M EURO
loCoberturas=loContenedor.oCoberturas
THIS.ADDPROPERTY("oCoberturas",loCoberturas)
loBusRecibo.ADDPROPERTY("oCoberturas",loCoberturas)


*- loDbMdv
loDbMdv001 = CREATEOBJECT('emdw0001')

* objeto Errores
loError=loContenedor.oError
THIS.ADDPROPERTY("oError",loError)

* objeto datos especficos del Riesgo
loEspRiesgo=loContenedor.oapesp

*- Situacion del Riesgo
loSituRies=loContenedor.OSITRIES

* objeto datos genricos del Riesgo
loRiesgo=loContenedor.oRiesgo

*- General
loGeneral = loContenedor.oApGeneral

*- Tamador
loTomador = loContenedor.oTomador

*- Asegurado
loAsegurado = loContenedor.oAsegurado

*- Domicilio del asegurado
loDomiAse =  loContenedor.OPADOMIASE

*- Banco
loBanco	= loContenedor.oBanco

*- Domicilio del Tomador
loDomiToma = loContenedor.oApDomiToma

* objeto datos del Usuario ligado a la operacin
loUsua=loContenedor.oUsua

* objeto Recibo
loApRecibo=loContenedor.oApRecibo

wNivel =IIF(EMPTY(tcNivel) , oUsua.nivusua , tcNivel)

*- Iniciar la matriz de errores y var asociadas
* lnErrorImpide, 			n de errores q impiden el calculo de la prima
* lnErrorImpideTecnico, 	n de errores tecnicos
* lnErrorImpideDatos, 		n de errores de datos

LOCAL;
	lnErrorImpide, lnErrorTecnico, lnErrorDato, lnRet, lcRet

STORE 0 TO lnRet, lnErrorImpide, lnErrorTecnico, lnErrorDato
lcRet = ''


DIMENSION loError.matriz[1,8]
loError.matriz=''


*- Pasa las garantias del array contratado al array de las garantias reales
THIS.PasarGarantia(loEspRiesgo, loRiesgo.IndDivcom)

*- Crea el cursor de Garantias para usarlo en las validaciones
OldAlias=ALIAS()
loEspRiesgo.CrearCursorGarantia()

*- Recuperar el metodo de validacion para cada entidad, ramo, modalidad
LOCAL lcMetodo
lcMetodo = loDbMdv001.RecuperarMetodoValidacion(loUsua.entidad, loUsua.ramo, loEspRiesgo.Modalidad)

*- Llama al mtodo de validacion
IF !EMPTY(ALLTRIM(lcMetodo))
	lcMetodo = 'This.' + ALLTRIM(lcMetodo) + '(loRiesgo.TariTasa, loContenedor, tcOpcion, loContenedorC )'
	&lcMetodo
ELSE
	loError.inser_er( 'V0024'+'0',"oEspRiesgo","No tiene polticas de Validacin, no es posible Calcular Prima",'','')
ENDIF

*- Cierro el cursor de memoria
IF USED ('curGarantia')
	SELE curGarantia
	USE
ENDIF

*-------------------------------------
*- Validaciones a nivel General de MDV
*-------------------------------------
*- Validacion de la Prima total Calculada
IF loEspRiesgo.PrimaTot=0 AND tcOpcion#'C'
	loError.inser_er( 'V0024'+'0',"oEspRiesgo","Prima Total igual a 0",'','')
ENDIF

*- Capital de reaseguro
IF loEspRiesgo.capireas<=0
	loError.inser_er("V00241","capireas",'Capital de Reaseguro no puede ser 0','','')
ENDIF


*- Validacion del modelo de condiciones generales
IF loUsua.TipOperacion # '8'
	lcRet=THIS.Val_ModeloCondicionesGenerales(loEspRiesgo.modcgral)
	IF lcRet # "0"
		loError.inser_er(lcRet,"oEspRiesgo","Modelo de Condiciones Generales",'','')
	ENDIF
ENDIF

*- Validacin datos de recibo
LOCAL;
	lcGestorAnt, lnDesctAnt, lcFormaCobAnt
IF TYPE('loApReciboC')='O'
	*- valores en cartera
	lnDesctAnt		=loApReciboC.desctemporal
	lcFormaCobAnt	=loApReciboC.formacob
	lcGestorAnt		=loApReciboC.tipoges
ELSE
	lnDesctAnt		=0
	lcFormaCobAnt	=''
	lcGestorAnt		=''
ENDIF


IF TYPE('loContenedor.obusrecibo.Mconceanual[8,3]')#'U'
	Wprimadetant=loContenedor.obusrecibo.Mconceanual[8,2]
	Wprimadetnue=loContenedor.obusrecibo.Mconceanual[8,3]
ELSE
	Wprimadetant = 0
	Wprimadetnue = 0
ENDIF

lnRet=Val_recibos(loEspRiesgo,loApRecibo,loUsua.TipOperacion, loApReciboC, loError, tcContenedor)

*_ Validacin datos del usuario ligados a la operacin
vret=Val_Usuario(loUsua , loUsua.Ramo , loError, loUsuaC)

*- Datos del Formulario relativos al tomador del seguro y situacion del riesgo
*- Validacin datos del tomador
lnRet = Val_Tomador( loTomador,loUsua.Ramo,loUsua.TipOperacion,loGeneral.tomaseg,loAsegurado.tipodoc, loerror, loEspRiesgo, loUsua.proceso )

*- Validacin datos cobro y otros datos tomador
THIS.Val_DatoCobro(tcContenedor)

*- Validacin domicilio de Habitual tomador
lnRet = Val_domicilioH(loDomiToma,loUsua.Ramo,loError)

*_ Validacin domicilio de Correspondencia
lnRet = Val_domicilioC(loDomiToma,loError)


*_ Validacin situacin del riesgo

IF THIS.TieneSituacionRiesgo(loEspRiesgo.TratEspecial, loUsua.Ramo)
	#IF debugmode
		WAIT WIND NOWAIT 'Validando Situacin del Riesgo'
	#ENDIF
	lnRet = Val_SitRiesgo(losituries,loError)
ELSE
	#IF debugmode
		WAIT WIND NOWAIT 'NO TIENE Situacin del Riesgo'
	#ENDIF
ENDIF


IF loGeneral.tomaseg='N'	&& tomador#asegurado
	*_ Validacin datos asegurado
	lnRet = Val_Asegurado(loAsegurado,loUsua.Ramo,loUsua.TipOperacion,loGeneral.tomaseg,lotomador.TipoDoc,loTomador.numdoc,loError,loEspRiesgo, loUsua.proceso)

	*_ Validacin domicilio asegurado
	lnREt = Val_DomiAseg(loDomiAse,loError)
ENDIF


*- Eliminar los errores de caja Madrid 073
IF loEspRiesgo.TratEspecial='001'
	THIS.QuitarErroresCaja073(loError, loContenedor)
ENDIF



*- Evalua los resultados

* lnErrorImpide, 				n de errores q impiden el calculo de la prima
* lnErrorImpideTecnico, 		n de errores tecnicos

*- Contar los errores que alla
LOCAL ;
	lnErrorImpide, lnErrorTecnico, lnErrorDato, lnResultado

STORE 0 TO lnErrorImpide, lnErrorTecnico, lnErrorDato, lnResultado

loError.ContarErrores ( @lnErrorImpide, @lnErrorTecnico,  @lnErrorDato ,  wNivel)

DO CASE
	CASE lnErrorImpide 	# 0
		lnResultado 	= 1
	CASE lnErrorTecnico # 0
		lnResultado 	= 2
	CASE lnErrorDato 	# 0
		lnResultado 	= 3
	OTHERWISE
		lnResultado 	= 0 	&& Sin errores
ENDCASE

RETU lnResultado


ENDPROC
PROCEDURE cargarmprimas
LPARAMETERS toEsp, toBusRecibo, tcRamo,  tcIndDivCom, tcTipoTarifa, tcTipOperacion, tcOficial
*- Prepara la matriz de primas que se utiliza en recibos
*- toBusRecibo.mPrimaNue = .obusRecibo.MprimaNue - Matriz de Recibos a Cargar
*- toEsp.aGarantiaTodas = Matriz con los valores de garantias para cargar
*- tcIndDivCom 1= diversos (garantias libres) 2= garantias Combinadas
*- tcOficial = Codigo de la Garantia oficial


LOCAL ;
	k,i, lcCober,lcGaran, tnFila

tnFila 	= 0

DO CASE
	*-------------------------------------*
	*- Combinadas, solo garantias oficiales
	*-------------------------------------*
	CASE tcIndDivCom='2'		
		DO CASE
			CASE toEsp.tratespecial='001'  && Caja Madrid

				LOCAL ;
					lnTotPrima015001, lnTotPrima016001

				STORE 0 TO lnTotPrima015001, lnTotPrima016001, lnId015001, lnId016001

				*- Suma las primas de la 015 y 016
				FOR k = 1 TO ALEN(toEsp.aGarantiaTodas,1)

					*- Suma las primas de la 015
					IF SUBSTR(toEsp.aGarantiaTodas(k,1),1,3) = '015' AND SUBSTR(toEsp.aGarantiaTodas(k,1),4,3) # '000'
						lnTotPrima015001 = lnTotPrima015001 + toEsp.aGarantiaTodas(k,6)
						IF toEsp.aGarantiaTodas(k,1)='015001'
							lnId015001 = k
						ENDIF
					ENDIF

					*- Suma las primas de la 016
					IF SUBSTR(toEsp.aGarantiaTodas(k,1),1,3) = '016' AND SUBSTR(toEsp.aGarantiaTodas(k,1),4,3) # '000'
						lnTotPrima016001 = lnTotPrima016001 + toEsp.aGarantiaTodas(k,6)
						IF toEsp.aGarantiaTodas(k,1) = '016001'
							lnId016001 = k
						ENDIF
					ENDIF

					*- Por aqui se cargan las garantias normales, excepto las 015 y 016....
					IF 		!INLIST(toEsp.aGarantiaTodas(k,9),'00','99') ;
							AND toEsp.aGarantiaTodas(k,6) > 0  ;							&& codig de desglose #00, 09 y tiene prima
						AND !INLIST(SUBSTR(toEsp.aGarantiaTodas(k,1),1,3),'015','016')

						*- Aplica o no los descuentos
						*toEsp.aGarantiaTodas(k,6) = THIS.CalcularPrima(toEsp.aGarantiaTodas(k,6), tcTipoTarifa, tcTipOperacion, toEsp.omPorRestoao )

						tnFila=tnFila+1
						DIME toBusRecibo.mPrimaNue(tnFila ,7)
						toBusRecibo.mPrimaNue[tnFila,1] = tcRamo
						toBusRecibo.mPrimaNue[tnFila,2] = toEsp.Modalidad
						toBusRecibo.mPrimaNue[tnFila,3] = INT(VAL(SUBSTR(toEsp.aGarantiaTodas(k,1),1,3))) && Cod. cobertura
						toBusRecibo.mPrimaNue[tnFila,4] = INT(VAL(SUBSTR(toEsp.aGarantiaTodas(k,1),4,3))) && Cod Garantia
						toBusRecibo.mPrimaNue[tnFila,5] = toEsp.aGarantiaTodas(k,6) 	&& Prima de la garantia
						toBusRecibo.mPrimaNue[tnFila,6] = toEsp.aGarantiaTodas(k,9)	&& Cod de desglose
						toBusRecibo.mPrimaNue[tnFila,7] = toEsp.aGarantiaTodas(k,4)	&& CAPITAL
					ENDIF
				ENDFOR

				*- Inserto los valores totalizados  de la ganrantia 015001
				IF lnTotPrima015001#0

					*lnTotPrima015001 = THIS.CalcularPrima(lnTotPrima015001, tcTipoTarifa, tcTipOperacion, toEsp.omPorRestoao )

					tnFila = tnFila + 1
					DIME toBusRecibo.mPrimaNue(tnFila ,7)
					toBusRecibo.mPrimaNue[tnFila,1] = tcRamo
					toBusRecibo.mPrimaNue[tnFila,2] = toEsp.Modalidad
					toBusRecibo.mPrimaNue[tnFila,3] = INT(VAL(SUBSTR(toEsp.aGarantiaTodas(lnId015001,1),1,3))) && Cod. cobertura
					toBusRecibo.mPrimaNue[tnFila,4] = INT(VAL(SUBSTR(toEsp.aGarantiaTodas(lnId015001,1),4,3))) && Cod Garantia
					toBusRecibo.mPrimaNue[tnFila,5] = lnTotPrima015001	 && Prima de la garantia
					toBusRecibo.mPrimaNue[tnFila,6] = toEsp.aGarantiaTodas(lnId015001,9)	&& Cod de desglose
					toBusRecibo.mPrimaNue[tnFila,7] = toEsp.aGarantiaTodas(lnId015001,4)	&& CAPITAL
				ENDIF

				*- Inserto los valores totalizados  de la ganrantia 016001
				IF lnTotPrima016001#0

					*lnTotPrima016001 = THIS.CalcularPrima(lnTotPrima016001, tcTipoTarifa, tcTipOperacion, toEsp.omPorRestoao )	&& Prima de la garantia

					tnFila = tnFila + 1
					DIME toBusRecibo.mPrimaNue(tnFila ,7)
					toBusRecibo.mPrimaNue[tnFila,1] = tcRamo
					toBusRecibo.mPrimaNue[tnFila,2] = toEsp.Modalidad
					toBusRecibo.mPrimaNue[tnFila,3] = INT(VAL(SUBSTR(toEsp.aGarantiaTodas(lnId016001,1),1,3))) && Cod. cobertura
					toBusRecibo.mPrimaNue[tnFila,4] = INT(VAL(SUBSTR(toEsp.aGarantiaTodas(lnId016001,1),4,3))) && Cod Garantia
					toBusRecibo.mPrimaNue[tnFila,5] = lnTotPrima016001
					toBusRecibo.mPrimaNue[tnFila,6] = toEsp.aGarantiaTodas(lnId016001,9)	&& Cod de desglose
					toBusRecibo.mPrimaNue[tnFila,7] = toEsp.aGarantiaTodas(lnId016001,4)	&& CAPITAL
				ENDIF

			OTHERWISE

				*-Tramiento Normal de la matrz de garantias todas
				FOR k = 1 TO ALEN(toEsp.aGarantiaTodas,1)
					IF !INLIST(toEsp.aGarantiaTodas(k,9),'00','99') AND toEsp.aGarantiaTodas(k,6) > 0  && codig de desglose #00, 09 y tiene prima
						tnFila=tnFila+1
						DIME toBusRecibo.mPrimaNue(tnFila ,7)
						toBusRecibo.mPrimaNue[tnFila,1] = tcRamo
						toBusRecibo.mPrimaNue[tnFila,2] = toEsp.Modalidad
						toBusRecibo.mPrimaNue[tnFila,3] = INT(VAL(SUBSTR(toEsp.aGarantiaTodas(k,1),1,3))) && Cod. cobertura
						toBusRecibo.mPrimaNue[tnFila,4] = INT(VAL(SUBSTR(toEsp.aGarantiaTodas(k,1),4,3))) && Cod Garantia
						toBusRecibo.mPrimaNue[tnFila,5] = toEsp.aGarantiaTodas(k,6)	&& Prima de la garantia
						toBusRecibo.mPrimaNue[tnFila,6] = toEsp.aGarantiaTodas(k,9)	&& Cod de desglose
						toBusRecibo.mPrimaNue[tnFila,7] = toEsp.aGarantiaTodas(k,4)	&& CAPITAL

					ENDIF
				ENDFOR
		ENDCASE
		
	*----------------------------*		
	*- Garanta Oficial + Libres
	*----------------------------*	
	CASE tcIndDivCom='1'
		LOCAL ;
			lnTotCapital, lnTotPrima, lcDesgloce

		lcDesgloce	=''

		STORE 0 TO lnTotCapital, lnTotPrima


		FOR k=1 TO ALEN(toEsp.aGarantiaTodas,1)
			IF !INLIST(toEsp.aGarantiaTodas(k,1),'018019','018020') and !INLIST(toEsp.aGarantiaTodas(k,9),'00') AND toEsp.aGarantiaTodas(k,6) > 0  && codig de desglose #00 (no se pasa a recibos) , 09 y tiene prima
				*- Sumo el total de capital y prima
				lnTotCapital	=	lnTotCapital + toEsp.aGarantiaTodas(k,4)
				lnTotPrima		= 	lnTotPrima +   toEsp.aGarantiaTodas(k,6)
			ENDIF
			if toEsp.aGarantiaTodas(k,1) = lcOficial
				lcDesgloce	= toEsp.aGarantiaTodas(k,9)
			endif
		ENDFOR

		DIME toBusRecibo.mPrimaNue(1 ,7)
		toBusRecibo.mPrimaNue[1,1] = tcRamo
		toBusRecibo.mPrimaNue[1,2] = toEsp.Modalidad
		toBusRecibo.mPrimaNue[1,3] = INT(VAL(SUBSTR(lcOficial ,1,3))) && Cod. cobertura
		toBusRecibo.mPrimaNue[1,4] = INT(VAL(SUBSTR(lcOficial ,4,3))) && Cod Garantia
		toBusRecibo.mPrimaNue[1,5] = lnTotPrima					&& Prima de la garantia
		toBusRecibo.mPrimaNue[1,6] = lcDesgloce					&& Cod de desglose
		toBusRecibo.mPrimaNue[1,7] = lnTotCapital				&& CAPITAL
ENDCASE

ENDPROC
PROCEDURE agrupargarantia
LPARAMETERS toEsp
*- Este metodo agrupara las garantas, hijas en una garanta padre.
*- Solo se llamara a este metodo para el tratamiento especial de Caja Madrid

*- taGar, 			array de garanitas del especifico a tratar

LOCAL ;
	lnId016000, lnId016000, lnId015000, lnId010000, loBusMdv

STORE 0 TO lnId016000, lnId016000, lnId015000, lnId010000

loBusMdv=CREATEOBJECT('BusMdv')

*- Recupero las filas donde estan las garantias padres
FOR i = 1 TO ALEN( toEsp.aGarantia , 1 )
	DO CASE
		CASE toEsp.aGarantia(i,1) = '016000'
			lnId016000 = i
		CASE toEsp.aGarantia(i,1) = '015000'
			lnId015000 = i
		CASE toEsp.aGarantia(i,1) = '010000'
			lnId010000 = i
	ENDCASE
ENDFOR

*- Sumo las primas de las garantias hijas en la cobertura y asigno el capital a las coberturas padres
FOR i = 1 TO ALEN( toEsp.aGarantia , 1 )

	*- Tratamiento del CONTINENTE,  Busco las hijas de la 016000
	IF lnId016000 # 0 AND INLIST( toEsp.aGarantia(i,1) , '016001' , '016002' , '016003' , '016004' , '016006'  )
		*- Asigno el capital a la garantia padre, uso la del 016001, porq las otras ( 2, 3, 4) son de igual capital
		IF toEsp.aGarantia(i,1) = '016001'
			toEsp.aGarantia( lnId016000 , 4 ) = toEsp.aGarantia(i,4)
		ENDIF
		*- Sumo las primas hijas a la padre
		toEsp.aGarantia( lnId016000 , 6 ) = toEsp.aGarantia( lnId016000 , 6 )  + toEsp.aGarantia( i , 6 )
	ENDIF

	*- Tratamiento del CONTENIDO,  Busco las hijas de la 015000
	IF lnId015000 # 0 AND INLIST( toEsp.aGarantia(i,1) , '015001' , '015002' , '015003' , '015004' , '015005' , '015006')
		*- Asigno el capital a la garantia padre, uso la del 015001, porq las otras ( 2, 3, 4, 5) son de igual capital
		IF toEsp.aGarantia(i,1) = '015001'
			toEsp.aGarantia( lnId015000 , 4 ) = toEsp.aGarantia(i,4)	&& capital
		ENDIF
		*- Sumo las primas hijas a la padre
		toEsp.aGarantia( lnId015000 , 6 ) = toEsp.aGarantia( lnId015000 , 6 )  + toEsp.aGarantia( i , 6 )
	ENDIF

	*- Tratamtiento de la Asistencia en el hogar
	if toEsp.aGarantia(i,1) = '012000'
		toEsp.OldPrima012000 = toEsp.aGarantia(i,6) 
	endif
ENDFOR

*- Sumo la prima de RC en las Garantias de Continente y Contenido
IF lnId010000  # 0

	DO CASE
			*- Tiene Contenido y Continente - divido la prima de RC en las 2
		CASE lnId016000 # 0 AND lnId015000 # 0 AND toEsp.aGarantia( lnId015000 , 4 ) > 0	 AND toEsp.aGarantia( lnId016000 , 4 ) > 0
			toEsp.aGarantia( lnId015000 , 6 ) = toEsp.aGarantia( lnId015000 , 6 ) + toEsp.aGarantia( lnId010000 , 6 ) /2 	&& 4.51 	&& 
			toEsp.aGarantia( lnId016000 , 6 ) = toEsp.aGarantia( lnId016000 , 6 ) + toEsp.aGarantia( lnId010000 , 6 ) /2 	&& 4.51 	&& 

			*- Tiene solo Contenido - le sumo la prima de RC
		CASE lnId016000 = 0 AND lnId015000 # 0 AND toEsp.aGarantia( lnId015000 , 4 ) > 0
			toEsp.aGarantia( lnId015000 , 6 ) = toEsp.aGarantia( lnId015000 , 6 ) + toEsp.aGarantia( lnId010000 , 6 ) 	&& 9.02 

			*- Tiene solo Continente - le sumo la prima de RC
		CASE lnId016000 # 0 AND lnId015000 = 0 AND toEsp.aGarantia( lnId016000 , 4 ) > 0
			toEsp.aGarantia( lnId016000 , 6 ) = toEsp.aGarantia( lnId016000 , 6 ) + toEsp.aGarantia( lnId010000 , 6 ) 	&& 9.02 
	ENDCASE
	FOR i = 1 TO ALEN (toEsp.aGarantiaTodas,1)
		IF toEsp.aGarantiaTodas(i,1) = '010000'
			toEsp.aGarantiaTodas(i,4) = 0
			toEsp.aGarantiaTodas(i,5) = 0
			toEsp.aGarantiaTodas(i,6) = 0
		ENDIF
	ENDFOR
ENDIF

*- Ahora hay q borrar las garantias hijas, la RC (010000), la Cobertura CONSORCIO del especifico (018000), Joyas y Alojas (Cobertura), Asisten al hogar 012000 -*
LOCAL ARRAY laNuevo( 1 , ALEN (toEsp.aGarantia,2))
LOCAL ARRAY laTemp( ALEN (toEsp.aGarantia,1) , ALEN (toEsp.aGarantia,2))
ACOPY (toEsp.aGarantia, laTemp)

FOR i = 1 TO ALEN (laTemp,1)
	IF ! INLIST( laTemp(i,1) , '015001' , '015002' , '015003' , '015004' , '015005',  '016001' , '016002' , '016003' , '016004' , '010000', '012000', '018000' , '016006','005000' )
		oLibreria.Array_insertar_Copiar (@laTemp, @laNuevo , i)
	ENDIF
ENDFOR
DIME toEsp.aGarantia ( ALEN(laNuevo,1) , ALEN(laNuevo,2) )
ACOPY ( laNuevo, toEsp.aGarantia )

ENDPROC
PROCEDURE verpadre
LPARAMETERS taGarantia, taGarForm, tnFila
*- Recibe una fila del array especifico y verifica si necesita agregar la cobertura padre

*- taGarForm
*- ra_texlarg, ;		&& 1
*- ra_modali, ;			&& 2
*- ra_ramo, ;			&& 3
*- ra_oblig,;			&& 4
*- ra_cobgar, ;			&& 5
*- ra_orden,;			&& 6
*- ra_cover,;			&& 7 COD COB/GAR
*- 'N0' AS Conratada,; 	&&8
*- ra_desg,;			&&9
*- ra_oblig AS ra_txtOblig,; &&10
*- 0 AS IdOrden,;		&& 11 esta posicion del array la usaremos para ordenar la matriz en la lista de contrataciones de garantias. El valor de este campo lo carga el metodo ordenar_array del especifico
*- ra_codig,;			&& 12 Indicada si la garanta sera visible o no
*- ra_capital,;			&& 13 tipo de capital
*- Ra_trans;			&& 14 0=No transmitir 1= Transmitir



*- Para padres e hijas -*
LOCAL ;
	tnRet, i, tcRa_CobGar, tcRa_coverPadre, llExiste, tnNuevaFila, lnIdPadre

tcRa_coverPadre	=''
llExiste		=.F.
lnIdPadre		=0

*- Obtiene el tipo de garantia c,g,l,a,k
FOR i=1 TO ALEN(taGarForm,1)
	IF taGarantia(tnFila,1)=taGarForm(i,7) && compara por ra_cover
		tcRa_CobGar = taGarForm(i,5)
		EXIT
	ENDIF
ENDFOR

DO CASE
	CASE tcRa_CobGar='A'
		*- cobertura sin expansion, no tiene hijas -*
	CASE tcRa_CobGar='C'
		*- cobertura CON expansion, y tiene hijas (G,L)  no hacer nada-*
	CASE tcRa_CobGar='G'
		*- Busco la Cobertura Padre y Obtengo el id -*
		FOR i = taGarantia( tnFila, 7) TO 1 STEP -1  && ojo recorre la matriz del form
			IF taGarForm(i,5) = 'C'
				lnIdPadre	 		= i
				tcRa_coverPadre 	= taGarForm(i,7)
				EXIT
			ENDIF
		ENDFOR


		*- Busco el padre en la matriz del especifico -*
		FOR i = 1 TO ALEN(taGarantia,1)
			IF taGarantia(i,1) = tcRa_coverPadre
				llExiste = .T.
				EXIT
			ENDIF
		ENDFOR
		
		IF llExiste or lnIdPadre=0
			*- Ya existe la garantia padre en la lista no agregarla -*
			*- O no existe en la tabla emdw0002
		ELSE
			*- No existe, entonces agregar el padre
			tnNuevaFila=ALEN(taGarantia,1)+1
			DIME taGarantia(tnNuevaFila,ALEN(taGarantia,2))

			taGarantia(tnNuevaFila,1)	= taGarForm(lnIdPadre,7)	&& codigo
			taGarantia(tnNuevaFila,2)	= taGarForm(lnIdPadre,1)	&& texto
			taGarantia(tnNuevaFila,3)	= taGarForm(lnIdPadre,4)	&& tipo de garantia ,1=obligatoria, 2=no obliga,3=personal usuario
			taGarantia(tnNuevaFila,4)	= 0.00						&& suma
			taGarantia(tnNuevaFila,5)	= 0.00						&& tasa
			taGarantia(tnNuevaFila,6)	= 0.00						&& prima
			taGarantia(tnNuevaFila,7)	= taGarForm(lnIdPadre,11)	&& IdOrden de la Garantia
			taGarantia(tnNuevaFila,8)	= taGarForm(lnIdPadre,12)	&& ra_codig
			taGarantia(tnNuevaFila,9)	= taGarForm(lnIdPadre,9)	&& desglose
			taGarantia(tnNuevaFila,10)	= taGarForm(lnIdPadre,5)	&& ra_Cobgar	tipo de garantia
			taGarantia(tnNuevaFila,11)	= taGarForm(lnIdPadre,13)	&& ra_capital
			taGarantia(tnNuevaFila,12)	= taGarForm(lnIdPadre,14)	&& ra_Trans
		ENDIF
ENDCASE



*!*	SELECT 	ra_texlarg, ;		&& 1
*!*		ra_modali, ;		&& 2
*!*		ra_ramo, ;			&& 3
*!*		ra_oblig,;			&& 4
*!*		ra_cobgar, ;		&& 5
*!*		ra_orden,;			&& 6
*!*		ra_cover,;			&& 7
*!*		'N0' AS Conratada,; 	&&8
*!*		ra_desg,;				&&9
*!*		ra_oblig AS ra_txtOblig,; &&10
*!*		0 AS IdOrden,;		&& 11	esta posicion del array la usaremos para ordenar la matriz en la lista de contrataciones de garantias. El valor de este campo lo carga el metodo ordenar_array del especifico
*!*		ra_codig,;			&& 12	Indicada si la garanta sera visible o no
*!*		ra_capital;			&& 13  tipo de capital
ENDPROC

ENDPROC
PROCEDURE _001_tarificar
LPARAMETERS toEsp, tdEfecIni, tcTipoTarifa, tcTipOperacion

*----------------------------------*
*- Tarificacin a Prima de Tarifa -*

*----------------------------------*
*- taEspGar	Matriz de Garantias del Especifico
*- tdEfecIni , fecha de efecto del suplemento
*- tcTipOperacion = tipo de operacion .ousua.TipOperacion (1,3,4,8)

LOCAL ;
	lcRet, lnTemp,;
	lnId016000, lnId015000, lnId013000, lnId012000, lnId005154, lnId005155, lnId156000, lnId157000, ;
	lnId023000, lnId006000, lnId158000, lnId018000, lnId018019, lnId018020

lcRet='0'
lnTemp=0

STORE 0 TO 	lnId016000, lnId015000, lnId013000, lnId012000, lnId005154, lnId005155, lnId156000, lnId157000, ;
	lnId023000, lnId006000, lnId158000, lnId018000, lnId018019, lnId018020

*- Para verificar si el capital es  >0, osea q esta contratado
LOCAL ;
	llCapital016000, llCapital015000, llCapitalPrima013000, llCapital012000, llCapital005154, llCapital005155, llCapital156000, llCapital157000, ;
	llCapital023000, llCapital006000, llCapital158000, llCapital018000, llCapital018019, llCapital018020

STORE .F. TO llCapital016000, llCapital015000, llCapitalPrima013000, llCapital012000, llCapital005154, llCapital005155, llCapital156000, llCapital157000, ;
	llCapital023000, llCapital006000, llCapital158000, llCapital018000, llCapital018019, llCapital018020

*- Recupero las filas donde estan las garantias padres
FOR i = 1 TO ALEN( toEsp.aGarantiaTodas, 1 )
	DO CASE
		CASE toEsp.aGarantiaTodas(i,1) = '016000'	&& Continente
			lnId016000 		= i
			llCapital016000	= IIF(toEsp.aGarantiaTodas(i,4) > 0 , .T. , .F. )

		CASE toEsp.aGarantiaTodas(i,1) = '015000'	&& Contenido
			lnId015000 = i
			llCapital015000	= IIF(toEsp.aGarantiaTodas(i,4) > 0 , .T. , .F. )

		CASE toEsp.aGarantiaTodas(i,1) = '013000'	&& Defensa Jurdica
			lnId013000 = i
			llCapitalPrima013000	= IIF(toEsp.aGarantiaTodas(i,4) > 0 or toEsp.aGarantiaTodas(i,6) > 0 , .T. , .F. )

		CASE toEsp.aGarantiaTodas(i,1) = '012000'	&& Asistencia al hogar
			lnId012000 = i
			llCapital012000	= IIF(toEsp.aGarantiaTodas(i,4) > 0 , .T. , .F. )

		CASE toEsp.aGarantiaTodas(i,1) = '005154'	&& Joyas en Caja Fuerte
			lnId005154 = i
			llCapital005154	= IIF(toEsp.aGarantiaTodas(i,4) > 0 , .T. , .F. )

		CASE toEsp.aGarantiaTodas(i,1) = '005155'	&& Joyas en Mueble Cerrado
			lnId005155 = i
			llCapital005155	= IIF(toEsp.aGarantiaTodas(i,4) > 0 , .T. , .F. )

		CASE toEsp.aGarantiaTodas(i,1) = '156000'	&& Atraco Fuera del hogar
			lnId156000 = i
			llCapital156000	= IIF(toEsp.aGarantiaTodas(i,4) > 0 , .T. , .F. )

		CASE toEsp.aGarantiaTodas(i,1) = '157000'	&& Desplazamiento en Vaciones
			lnId157000 = i
			llCapital157000	= IIF(toEsp.aGarantiaTodas(i,4) > 0 , .T. , .F. )

		CASE toEsp.aGarantiaTodas(i,1) = '023000'	&& Accidentes Corporales
			lnId023000 = i
			llCapital023000	= IIF(toEsp.aGarantiaTodas(i,4) > 0 , .T. , .F. )

		CASE toEsp.aGarantiaTodas(i,1) = '006000'	&& Ampliacion daos estticos
			lnId006000 = i
			llCapital006000	= IIF(toEsp.aGarantiaTodas(i,4) > 0 , .T. , .F. )

		CASE toEsp.aGarantiaTodas(i,1) = '158000'	&& Reconstruccion de Jardines
			lnId158000 = i
			llCapital158000	= IIF(toEsp.aGarantiaTodas(i,4) > 0 , .T. , .F. )

		CASE toEsp.aGarantiaTodas(i,1) = '018000'	&& Consorcio
			lnId018000 = i
			llCapital018000	= IIF(toEsp.aGarantiaTodas(i,4) > 0 , .T. , .F. )

		CASE toEsp.aGarantiaTodas(i,1) = '018019'	&& Consorcio de daos
			lnId018019 = i
			llCapital018019	= IIF(toEsp.aGarantiaTodas(i,4) > 0 , .T. , .F. )

		CASE toEsp.aGarantiaTodas(i,1) = '018020'	&& Consorcio de Accidentes
			lnId018020 = i
			llCapital018020	= IIF(toEsp.aGarantiaTodas(i,4) > 0 , .T. , .F. )
	ENDCASE
ENDFOR


*- Tratamiento de recargos y descuentos
LOCAL ;
	lnRecargos, lnDescuentos, lnCapital, lnPrima

lnRecargos	=0
lnDescuentos=0


*-----------------------------------------------
*- TRATAMIENTO DE COBERTURA DE CONTINENTE 160000
*-----------------------------------------------
IF llCapital016000

	IF toEsp.Vvda1Riesgo = 1
		toEsp.aGarantiaTodas( lnId016000 , 6) = 36.06
	ELSE
		IF toEsp.ModalProd = "0240"
			toEsp.aGarantiaTodas( lnId016000 , 6) = toEsp.aGarantiaTodas( lnId016000,4) * 0.0009 && capitalcontinente*0.0009
		ELSE
			toEsp.aGarantiaTodas( lnId016000 , 6) = toEsp.aGarantiaTodas( lnId016000,4) * 0.001 	&& primacontinente=capitalcontinente*0.001
		ENDIF

		IF toEsp.poblacion7500 = "S"	&& Poblacion menos de 7500 hab
			lnRecargos = lnRecargos + toEsp.aGarantiaTodas( lnId016000 , 6) * 0.1
		ENDIF
		*- Si coexiste recargo 1 (el de arriba ) y 2 se aplica el de mayor agravacion
		IF toEsp.Vvda1km = "S"		&& vvda + 1 km
			lnRecargos  = toEsp.aGarantiaTodas( lnId016000 , 6) * 0.1
		ENDIF

		IF toEsp.VvdaUnifamiliar = "S" and inlist(toEsp.ModalProd,'230','240') && VVda Unifamiliar
			lnRecargos  = lnRecargos  + toEsp.aGarantiaTodas( lnId016000 , 6) * 0.15
		ENDIF

		IF toEsp.VvdaSecundaria = "S"  and inlist(toEsp.ModalProd,'230','240') 	&& Vvda. Secundaria
			lnRecargos  = lnRecargos  + toEsp.aGarantiaTodas( lnId016000 , 6) * 0.25
		ENDIF

		IF tcTipOperacion ='1' AND YEAR(tdEfecIni) - toEsp.AoConstruccion > 25  AND EMPTY(toEsp.aoReforma)  and inlist(toEsp.ModalProd,'230','240') && Vvda + 25 Aos
			lnRecargos  = lnRecargos  + toEsp.aGarantiaTodas( lnId016000 , 6) * 0.15
		ENDIF

		*- TRATAMIENTO DE SOLIDA CONSTRUCCION
		LOCAL ;
			lnSolCosn
		IF toEsp.VvdaSolida = "S"
			lnSolCosn = 0    	&& NO AFECTA A PRIMA QUE PRODUCE TARIFA POR TASA
			lnRecargos  = lnRecargos  + toEsp.aGarantiaTodas( lnId016000 , 6) * lnSolCosn
		ENDIF

		*- Tratamiento de descuentos
		lnDescuentos = 0

		IF (toEsp.PuertaBlindada = "S" OR toEsp.PuertaBlindadaAccesoProt = "S") AND toEsp.AlarmaInstalada="S"
			lnDescuentos =  toEsp.aGarantiaTodas( lnId016000 , 6) * 0.15
		ELSE
			IF toEsp.PuertaBlindada = "S" OR toEsp.PuertaBlindadaAccesoProt = "S"
				lnDescuentos =  toEsp.aGarantiaTodas( lnId016000 , 6) * 0.1
			ENDIF
			IF toEsp.alarmainstalada="S" and inlist(toEsp.ModalProd,'240','230') 
				lnDescuentos =  toEsp.aGarantiaTodas( lnId016000 , 6) * 0.1
			ENDIF
		ENDIF

		*- Totalizo los importes calculados
		toEsp.aGarantiaTodas( lnId016000 , 6) = toEsp.aGarantiaTodas( lnId016000 , 6) + lnRecargos - lnDescuentos

		IF toEsp.aGarantiaTodas( lnId016000 , 6) < 0
			toEsp.aGarantiaTodas( lnId016000 , 6) = 0
			RETU 'V0001'+'0'  && 1=no impide el calculo de la prima  / 0=impide el calculo
		ENDIF
	ENDIF
ENDIF

*--------------------------------------------
*-TRATAMIENTO DE COBERTURA DE CONTENIDO 15000
*--------------------------------------------
IF llCapital015000


	IF toEsp.ModalProd = "0240"
		toEsp.aGarantiaTodas( lnId015000 , 6) = toEsp.aGarantiaTodas( lnId015000 , 4) * 0.0027
	ELSE
		toEsp.aGarantiaTodas( lnId015000 , 6) = toEsp.aGarantiaTodas( lnId015000 , 4) * 0.003
	ENDIF

	*- Tratamiento de recargos
	lnRecargos = 0
	IF toEsp.poblacion7500 = "S"
		lnRecargos =lnRecargos + toEsp.aGarantiaTodas( lnId015000 , 6) * 0.1
	ENDIF
	IF toEsp.Vvda1km = "S"
		lnRecargos = 0				&& si coexiste recargo 1 y 2 se aplica el de mayor agravacion
		lnRecargos =lnRecargos +toEsp.aGarantiaTodas( lnId015000 , 6) * 0.2
	ENDIF
	IF toEsp.VvdaUnifamiliar = "S"  and inlist(toEsp.ModalProd,'230','240') 
		lnRecargos =lnRecargos + toEsp.aGarantiaTodas( lnId015000 , 6) * 0.15
	ENDIF
	IF toEsp.VvdaSecundaria = "S"  and inlist(toEsp.ModalProd,'230','240') 
		lnRecargos =lnRecargos + toEsp.aGarantiaTodas( lnId015000 , 6) * 0.25
	ENDIF

	IF tcTipOperacion ='1' AND YEAR(tdEfecIni) - toEsp.AoConstruccion > 25  AND EMPTY(toEsp.aoReforma)  and inlist(toEsp.ModalProd,'230','240') 
			lnRecargos =lnRecargos + toEsp.aGarantiaTodas( lnId015000 , 6) * 0.15
	ENDIF
	IF toEsp.VvdaSolida = "S"
		lnSolCosn = 0   && NO AFECTA A PRIMA YA QUE PRODUCE TARIFA POR TASA
		lnRecargos = lnRecargos +toEsp.aGarantiaTodas( lnId015000 , 6) * lnSolCosn
	ENDIF

	*- Tratamiento de descuentos
	lnDescuentos = 0

	IF (toEsp.PuertaBlindada = "S" OR toEsp.PuertaBlindadaAccesoProt = "S")  AND toEsp.AlarmaInstalada="S"
		lnDescuentos =toEsp.aGarantiaTodas( lnId015000 , 6) * 0.15
	ELSE
		IF toEsp.PuertaBlindada = "S" OR toEsp.PuertaBlindadaAccesoProt = "S"
			lnDescuentos =toEsp.aGarantiaTodas( lnId015000 , 6) * 0.15
		ENDIF
		IF toEsp.alarmainstalada = "S" and inlist(toEsp.ModalProd,'240','230') 
			lnDescuentos =toEsp.aGarantiaTodas( lnId015000 , 6) * 0.15
		ENDIF
	ENDIF

	*- Almacenamos los importes calculados
	LOCAL ;
		lnAux

	lnAux=0
	IF tdEfecIni > {14/03/2000}
		toEsp.aGarantiaTodas( lnId015000 , 6) = MAX(toEsp.aGarantiaTodas( lnId015000 , 6) + lnRecargos - lnDescuentos , 27.05  )  && 27.05 
	ELSE
		toEsp.aGarantiaTodas( lnId015000 , 6) = toEsp.aGarantiaTodas( lnId015000 , 6) + lnRecargos - lnDescuentos
	ENDIF
	IF toEsp.aGarantiaTodas( lnId015000 , 6) < 0
		toEsp.aGarantiaTodas( lnId015000 , 6) = 0
		RETU 'V0001'+'0'  && 1=no impide el calculo de la prima  / 0=impide el calculo
	ENDIF
ENDIF


*-----------------------------------------------------
*- TRATAMIENTO DE COBERTURA DE DEFENSA JURIDICA 013000
*-----------------------------------------------------
IF llCapitalPrima013000
	toEsp.aGarantiaTodas( lnId013000 , 4) = 3005.06
	toEsp.aGarantiaTodas( lnId013000 , 6) = 6.47 && 
ENDIF

*-----------------------------------------------------
* TRATAMIENTO DE COBERTURA DE ASISTENCIA HOGAR - 012000
*-----------------------------------------------------
*- NO SALDRA EN PANTALLA PERO MODIFICA LAS PRIMAS de LAS COBERTURAS de CONTENIDO
*- Y de CONTINENTE CUANDO SE TARIFICA A PRIMA de TARIFA.
*- Esta garantia se contrata en todos los ramos 0202,0210,0230,0240.


* Restamos la prima de asistencia a continente y contenido
IF llCapital016000 && continente esta contratada
	IF llCapital015000
		toEsp.aGarantiaTodas( lnId016000 , 6) = toEsp.aGarantiaTodas( lnId016000 , 6) - 2.52 && 
		toEsp.aGarantiaTodas( lnId015000 , 6) = toEsp.aGarantiaTodas( lnId015000 , 6) - 2.52 && 
	ELSE
		toEsp.aGarantiaTodas( lnId016000 , 6) = toEsp.aGarantiaTodas( lnId016000 , 6) - 5.05 &&
	ENDIF
ELSE
	toEsp.aGarantiaTodas( lnId015000 , 6) = toEsp.aGarantiaTodas( lnId015000 , 6) - 5.05 &&
ENDIF

*- Verifica que no haya quedado una prima negativa -*
IF toEsp.aGarantiaTodas( lnId016000 , 6) < 0
	toEsp.aGarantiaTodas( lnId016000 , 6) = 0
	RETU 'V0001'+'0'  && 1=no impide el calculo de la prima  / 0=impide el calculo
ENDIF
IF toEsp.aGarantiaTodas( lnId015000 , 6) < 0
	toEsp.aGarantiaTodas( lnId015000 , 6) = 0
	RETU 'V0001'+'0'  && 1=no impide el calculo de la prima  / 0=impide el calculo
ENDIF


*----------------------------------------------------------
* TRATAMIENTO DE COBERTURA DE JOYAS EN CAJA FUERTE - 005154
*----------------------------------------------------------
IF llCapital005154
	toEsp.aGarantiaTodas( lnId005154 , 6) = toEsp.aGarantiaTodas( lnId005154 , 4) * 0.004
ENDIF

*-------------------------------------------------------------
* TRATAMIENTO DE COBERTURA DE JOYAS EN MUEBLE CERRADO - 005155
*-------------------------------------------------------------
IF llCapital005155
	toEsp.aGarantiaTodas( lnId005155 , 6) = toEsp.aGarantiaTodas( lnId005155 , 4) * 0.014
ENDIF

*------------------------------------------------------------
* TRATAMIENTO DE COBERTURA DE ATRACO FUERA DE HOGAR - 156000
*------------------------------------------------------------
IF llCapital156000
	toEsp.aGarantiaTodas( lnId156000 , 4) = 450.76
	toEsp.aGarantiaTodas( lnId156000 , 6) = 6.01  && 
ENDIF

*------------------------------------------------------------------
* TRATAMIENTO DE COBERTURA DE DESPLAZAMIENTO EN VACACIONES - 157000
*------------------------------------------------------------------
IF llCapital157000
	toEsp.aGarantiaTodas( lnId157000 , 4)= 3005.06
	toEsp.aGarantiaTodas( lnId157000 , 6)= 12.02 && 
ENDIF

*-----------------------------------------------------------
* TRATAMIENTO DE COBERTURA DE ACCIDENTES CORPORALES - 023000
*-----------------------------------------------------------
IF llCapital023000
	toEsp.aGarantiaTodas( lnId023000 , 4) = 6010.12
	toEsp.aGarantiaTodas( lnId023000 , 6) = 12.02
ENDIF

*-------------------------------------------------------------------
* TRATAMIENTO DE COBERTURA DE AMPLIACION DE DAOS ESTETICOS - 006000
*-------------------------------------------------------------------
IF llCapital006000

	if toEsp.aGarantiaTodas( lnId016000 , 4) * 0.15 > 2404.05
		toEsp.aGarantiaTodas( lnId006000 , 4) = 2404.05
	else	
		toEsp.aGarantiaTodas( lnId006000 , 4) = toEsp.aGarantiaTodas( lnId016000 , 4) * 0.15 
	endif
	toEsp.aGarantiaTodas( lnId006000 , 6) = toEsp.aGarantiaTodas( lnId006000 , 4) * 0.01
ENDIF

*----------------------------------------------------------------
* TRATAMIENTO DE COBERTURA DE RECONSTRUCCION DE JARDINES - 158000
*----------------------------------------------------------------
IF llCapital158000
	toEsp.aGarantiaTodas( lnId158000 , 4) = toEsp.aGarantiaTodas( lnId016000 , 4) * 0.03
	toEsp.aGarantiaTodas( lnId158000 , 6) = toEsp.aGarantiaTodas( lnId158000 , 4) * 0.005
ENDIF

*---------------------------------
* TRATATAMIENTO DE LAS SOBREPRIMAS
*---------------------------------

IF toEsp.omCobContinente = 'S' AND lnId016000 # 0 and inlist(toEsp.ModalProd,'240','230') && rc antena
	toEsp.aGarantiaTodas( lnId016000 , 6) = toEsp.aGarantiaTodas( lnId016000 , 6) + 12.02
ENDIF

IF toEsp.omCobContenido = 'S'	AND lnId015000 # 0 && Pecera mas de 100 litros
	toEsp.aGarantiaTodas( lnId015000 , 6) = toEsp.aGarantiaTodas( lnId015000 , 6) + 6.010
ENDIF

*--------------------------------------------------
* TRATAMIENTO DE LA COBERTURA DE CONSORCIO - 018000
*--------------------------------------------------
*- Se ENVIAN LAS DOS COBERTURAS POR SEPARADO AL HOST
*- en los recibos se pasa LA SUMA DE AMBAS

THIS.CalcularPrimaConsorcio(toEsp)

*- Tratamiento de los descuentos Ordenes Ministeriales
	*- 6/3/2002 Se anulo esto....ya no se aplican descuentos prima a prima
	*!*	FOR  i = 1 TO ALEN (toEsp.aGarantiaTodas,1)
	*!*		IF toEsp.aGarantiaTodas( i , 6) # 0 and substr(toEsp.aGarantiaTodas(i,1),1,3) # '018'	&& consorcio
	*!*			toEsp.aGarantiaTodas( i , 6) = THIS.CalcularPrima( toEsp.aGarantiaTodas(i,6), tcTipoTarifa, tcTipOperacion, toEsp.omPorRestoao )	&& Prima de la garantia
	*!*		ENDIF
	*!*	ENDFOR

RETURN lcREt


ENDPROC
PROCEDURE vgarcajesp
LPARAMETERS taEsp, tcRamo, tcModalidad
* taEsp, array de garantias del especifico

*- Este metodo verifica q existan todas las garantias obligatorias para la operativa de
*- Mdv - Caso especial de Caja Madrid


*- Array donde se cargaran todas las garantias a verificar, una fila para cada verificacin
local array laVerificar (2,5)

*- Asistencia al hogar -*
laVerificar(1,1) = '012000' 
laVerificar(1,2) = .f.		&& Para el control - Existe o no
laVerificar(1,3) = 0		&& Suma
laVerificar(1,4) = 0		&& Tasa
laVerificar(1,5) = 5.05 	&& 

*- RC -*
laVerificar(1,1) = '010000' 
laVerificar(1,2) = .f.		&& Para el control - Existe o no
laVerificar(1,3) = 150253.03&& Suma	- 25.000.000 ptas
laVerificar(1,4) = 0		&& Tasa
laVerificar(1,5) = 9.02 	&& 



local ;
	i, j

store 0 to i,j

*- Busco y marco como que si existe en la columna 2 -*
FOR i = 1 TO ALEN(laVerificar,1)
	for j = 1 to alen (taEsp,1)
		if laVerificar (i,1) = taEsp (j,1)
			laVerificar (i,2) = .t.			
			exit
		endif
	endfor
endfor			

*- Verifico las columnas de existencia, si no existe inserto la garantia en el especifico
for i=1 to alen(laVerificar,1)
	if !laVerificar(i,2)
		*- Existe
		this.Insertar_Garantia (@taEsp, tcModalidad, tcRamo, laVerificar(i,1), laVerificar(i,3), laVerificar(i,4), laVerificar(i,5) ) 
	endif	
endfor

ENDPROC
PROCEDURE insertar_garantia
Lparameters taEsp, tcModalidad, tcRamo, tcCodigo, tnSuma, tnTasa, tnPrima, tlNoRedimensionar

*- tlNoRedimensionar=.f. cuando se inserta la garantia en la ultima Fila, siempre sumando 1 fila a la matriz
*- tlNoRedimensionar=.t. cuando se inserta la garantia en la ultima Fila sin redimensionar



*- Verifica que no exista antes de agregarla
If ASCAN(taEsp,tcCodigo)#0
	Return
Endif


Local ;
	tnNew

If tlNoRedimensionar
	tnNew = ALEN(taEsp,1)
Else
	tnNew = ALEN(taEsp,1) + 1
	Dime taEsp ( tnNew, ALEN(taEsp,2) )
Endif

Local ARRAY aux(1,1)

*- Devuelve en aux esta disposicion de datos -*
*- ra_oblig, ra_cobgar, ra_texlarg, ra_orden, ra_desg, ra_codig ;
local loDbDmv002
loDbDmv002 = CREATEOBJECT('emdw0002')
loDbDmv002.recuperar_garantia(@aux, tcModalidad, tcRamo, tcCodigo)

taEsp(tnNew,1)	=tcCodigo	&& codigo
taEsp(tnNew,2)	=aux(1,3)	&& texto garantia
taEsp(tnNew,3)	=aux(1,1)	&& tipo de garantia ,1=obligatoria, 2=no obliga,3=personal usuario
taEsp(tnNew,4)	=tnSuma		&& suma
taEsp(tnNew,5)	=tnTasa		&& tasa
taEsp(tnNew,6)	=tnPrima	&& prima
*taEsp(tnNew,7)	=tnNew		&& IdOrden de la Garantia
taEsp(tnNew,7)	=aux(1,4)	&& IdOrden de la Garantia
taEsp(tnNew,8)	=aux(1,6)	&& Ra_codig
taEsp(tnNew,9) 	=aux(1,5)	&& ra_desg	codigo de desglose
taEsp(tnNew,10)	=aux(1,2)	&& ra_Cobgar	tipo de garantia
taEsp(tnNew,11)	=aux(1,7)	&& ra_captal
taEsp(tnNew,12)	=aux(1,8)	&& ra_Trans	tipo de garantia



ENDPROC
PROCEDURE verificaroperacion
lparameters tcTratEspecial, tcOperacion, tcLicencia, tcPlataforma
local ;
	lodbMdv000, lcOperaciones
loDbMdv000 = createobject('emdw0000')

#IF DEBUGMODE
	lclogear='TratEspecial = '+tcTratEspecial +' - Operacion = '+ tcOperacion +' - Licencia = '+ tcLicencia + ' - Plataforma = '+ tcPlataforma
	=STRTOFILE(lcLogear,'_Log_verificacion_operacion.TXT')
#ENDIF

lcOperaciones = lodbMdv000.Recuperar_Operaciones(tcTratEspecial, tcLicencia, tcPlataforma)

RETU tcOperacion $ lcOperaciones

ENDPROC
PROCEDURE tratararray
LPARAMETERS taDatos, tcModalidad, tcRamo, tcTratEspecial, tcModalProd
LOCAL i
i=0



*- borrar las garantias
LOCAL ARRAY laNuevo( 1 , ALEN (taDatos,2))

DO CASE
		*- 073 Caja
	CASE tcTratEspecial='001'
		*- Borro las Garantias que no estan disponibles segun el ModalProd
		DO CASE
			CASE tcModalProd='0202' OR tcModalProd='0210'
				FOR i = 1 TO ALEN (taDatos,1)
					IF !INLIST(taDatos(i,7),'013000','006000','158000')
						oLibreria.Array_insertar_Copiar (@taDatos, @laNuevo , i)
					ENDIF
				ENDFOR
				taDatos=''
				DIME taDatos ( ALEN(laNuevo,1) , ALEN(laNuevo,2) )
				ACOPY ( laNuevo, taDatos )

			CASE tcModalProd='0240'
				FOR i = 1 TO ALEN (taDatos,1)
					IF INLIST(taDatos(i,7),'015000','016000')
						oLibreria.Array_insertar_Copiar (@taDatos, @laNuevo , i)
					ENDIF
				ENDFOR
				taDatos=''
				DIME taDatos ( ALEN(laNuevo,1) , ALEN(laNuevo,2) )
				ACOPY ( laNuevo, taDatos )

		ENDCASE

		*- Pongo las garantias 'G' (hijas) como autonomas, para q luego no se le agreguen las hijas
		*- Esta es un particularidad de caja, no hay q preocuparse
		FOR i = 1 TO ALEN (taDatos,1)
			IF taDatos( i, 5) = 'G'
				taDatos( i, 5) = 'A'
			ENDIF
		ENDFOR

	OTHERWISE
		*- nada
ENDCASE






ENDPROC
PROCEDURE tratarantestarificar
LPARAMETERS toContenedor, toContenedorC
this.oContenedor  = toContenedor
this.oContenedorC = toContenedorC
LOCAL ;
	lcRet, lcOldTariTasa
lcRet='0'


*- En nueva Produccion
*- Prima de Tarifa  ='S'
*- Tasa Manual = 'N'

*- En suplementos
*- PRIMA TARIFA ACTUAL = 'X'
*- PRIMA ADQUIRIDA = 'S'
*- Tasa MANUAL = 'N'
*- Para Resolver esta porqueria del TariTasa

lcOldTariTasa = toContenedor.oRiesgo.TariTasa
IF TYPE('toContenedorC')#'O' AND toContenedor.oRiesgo.TariTasa='S'&& Nueva Produccion
	*- lo cambio para este metodo y despues lo recupero al final
	toContenedor.oRiesgo.TariTasa='X'
ENDIF


WITH toContenedor

	*- Verificar como hay que tarificar, (Principalmente para el caso de aquirida
	THIS.Verificar_Tarificacion(toContenedor, toContenedorC)

	*- Capital de Reaseguro
	THIS.CalcularCapitalReaseguro(.oApEsp)

	*- Reflejar las variaciones de las primas
	*- en el array visual (aGarantia) y tratar para el caso especial de caja Madrid
	THIS.Sincronizar(.oApEsp, .oUsua.Ramo, .oApEsp.Modalidad, 2, .oRiesgo.indDivcom )

	DO CASE
			*-------------------*
			*- Prima Adquirida -*
			*-------------------*
		CASE .oRiesgo.TariTasa='S'
			DO CASE
					*- 074 - Multiriesgo comercios de Caja Madrid
				CASE .oApEsp.TratEspecial='018'

					THIS._018_Tarificar(.oApEsp, .oUsua.TipOperacion, .oSitRies.codposth, .oRiesgo.TariTasa)

					*- Reflejar las variaciones de las primas a consecuencia de los ;
					*- calculos anteriores en el array aGarantiaTodas
					THIS.Sincronizar(.oApEsp, .oUsua.Ramo, .oApEsp.Modalidad, 2, .oRiesgo.indDivcom)
				
				CASE .oApEsp.TratEspecial='025'
					THIS._25_Tarificar(toContenedor)

					*- Reflejar las variaciones de las primas a consecuencia de los ;
					*- calculos anteriores en el array aGarantiaTodas
					THIS.Sincronizar(.oApEsp, .oUsua.Ramo, .oApEsp.Modalidad, 2, .oRiesgo.indDivcom)
									
			ENDCASE

			*---------------*
			*- Tasa Manual -*
			*---------------*
		CASE .oRiesgo.TariTasa='N'
			DO CASE
					*- 073 De Caja Madrid (MULTIHOGAR)
				CASE .oApEsp.TratEspecial='001'

					*- Calcula las primas de consorcio
					THIS.CalcularPrimaConsorcio(.oApEsp)

					*- Reflejar las variaciones de las primas aGarantiaTodas -> aGarantia
					THIS.Sincronizar(.oApEsp, .oUsua.Ramo, .oApEsp.Modalidad, 1, .oRiesgo.indDivcom)

					*- Desgloso las Garantias para luego pasarlar a Recibos
					THIS.Desglosar(.oApEsp, 'ParaTarificar',.oUsua.TipOperacion)

				*- Cristales Autos Mapfre
				CASE .oApEsp.TratEspecial='024'
					THIS._024_Tarificar(.oApEsp, .oUsua.TipOperacion, .oRiesgo.TariTasa)

					*- Reflejar las variaciones de las primas a consecuencia de los ;
					*- calculos anteriores en el array visual (aGarantia)
					THIS.Sincronizar(.oApEsp, .oUsua.Ramo, .oApEsp.Modalidad, 2, .oRiesgo.indDivcom)

				*- Cristales Autos Diversos
				CASE .oApEsp.TratEspecial='025'
					THIS._025_Tarificar(toContenedor)

					*- Reflejar las variaciones de las primas a consecuencia de los ;
					*- calculos anteriores en el array visual (aGarantia)
					THIS.Sincronizar(.oApEsp, .oUsua.Ramo, .oApEsp.Modalidad, 2, .oRiesgo.indDivcom)

				*- Multiriesgo comercios
				CASE .oApEsp.TratEspecial='018'
					
					This._018_calcular_capital_reaseguro(.oApEsp, .oUsua.TipOperacion, .oSitRies.codposth, .oRiesgo.TariTasa)

*!*					*- Cosechas Agropecuaria
*!*					CASE .oApEsp.TratEspecial='009'
*!*						
*!*						This._009_calcular_capital_reaseguro(.oApEsp, .oUsua.TipOperacion, .oSitRies.codposth, .oRiesgo.TariTasa)

*!*						
				OTHERWISE
					*- Reflejar las variaciones de las primas
					*- en el array visual (aGarantia) y tratar para el caso especial de caja Madrid
					*- THIS.Sincronizar(.oApEsp, .oUsua.Ramo, .oApEsp.Modalidad, 2, .oRiesgo.indDivcom )
			ENDCASE

			*----------------*
			*- Prima de Tarifa
			*----------------*
		CASE .oRiesgo.TariTasa='X'
			DO CASE
					*- 074 - Multiriesgo comercios de Caja Madrid
				CASE .oApEsp.TratEspecial='018'

					THIS._018_Tarificar(.oApEsp, .oUsua.TipOperacion, .oSitRies.codposth, .oRiesgo.TariTasa)

					*- Reflejar las variaciones de las primas a consecuencia de los ;
					*- calculos anteriores en el array aGarantiaTodas
					THIS.Sincronizar(.oApEsp, .oUsua.Ramo, .oApEsp.Modalidad, 2, .oRiesgo.indDivcom)

					*- 073 De Caja Madrid (MULTIHOGAR)
				CASE .oApEsp.TratEspecial='001'

					*- Pasar las Garantias de aGarantia -> aGarantiaTodas
					THIS.Sincronizar(.oApEsp, .oUsua.Ramo, .oApEsp.Modalidad, 2, .oRiesgo.indDivcom)

					*- Tarifica con la matriz de Garantias Todas
					lcRet = THIS._001_Tarificar( .oApEsp, .oRiesgo.fefecIni, .oRiesgo.TariTasa, .oUsua.TipOperacion )
					IF lcRet # '0'
						RETU  lcRet
					ENDIF

					*- Desgloso las Garantias para luego pasarlar a Recibos
					THIS.Desglosar(.oApEsp, 'ParaTarificar', .oUsua.TipOperacion)

					*- Reflejar las variaciones de las primas a consecuencia de los ;
					*- calculos anteriores en el array visual (aGarantia)
					THIS.Sincronizar(.oApEsp, .oUsua.Ramo, .oApEsp.Modalidad, 1, .oRiesgo.indDivcom)


					*- HIPOTECARIO - Caja Madrid
				CASE .oApEsp.TratEspecial='016'
					THIS._016_Tarificar(.oApEsp, .oUsua.TipOperacion)

					*- Reflejar las variaciones de las primas a consecuencia de los ;
					*- calculos anteriores en el array visual (aGarantia)
					THIS.Sincronizar(.oApEsp, .oUsua.Ramo, .oApEsp.Modalidad, 2, .oRiesgo.indDivcom)

					*- Cristales Autos Mapfre
				CASE .oApEsp.TratEspecial='024'
					THIS._024_Tarificar(.oApEsp, .oUsua.TipOperacion, .oRiesgo.TariTasa)

					*- Reflejar las variaciones de las primas a consecuencia de los ;
					*- calculos anteriores en el array visual (aGarantia)
					THIS.Sincronizar(.oApEsp, .oUsua.Ramo, .oApEsp.Modalidad, 2, .oRiesgo.indDivcom)

					*- Cristales Diversos
				CASE .oApEsp.TratEspecial='025'
					THIS._025_Tarificar(toContenedor)

					*- Reflejar las variaciones de las primas a consecuencia de los ;
					*- calculos anteriores en el array visual (aGarantia)
					THIS.Sincronizar(.oApEsp, .oUsua.Ramo, .oApEsp.Modalidad, 2, .oRiesgo.indDivcom)

				OTHERWISE
					*- Por ahora nada
			ENDCASE

	ENDCASE
	*- Recupero el valor del TariTasa
	toContenedor.oRiesgo.TariTasa= lcOldTariTasa

	*- Recalcular las tasas
	THIS.Recalcular_tasas(.oApEsp)

	*- Para retocar algunas cosas de la matriz antes de mostrarla
	DO CASE
		CASE .oApEsp.TratEspecial='018'
			.oApEsp.aGarantia [ aSubScript(.oApEsp.aGarantia, aScan(.oApEsp.aGarantia,'018019') , 1) , 5] = 0
			.oApEsp.aGarantiaTodas [ aSubScript(.oApEsp.aGarantiaTodas, aScan(.oApEsp.aGarantiaTodas,'018019') , 1) , 5] = 0
		OTHERWISE
			*- Nada por ahora
	ENDCASE

	RETU lcRet

ENDWITH

ENDPROC
PROCEDURE pasargarantia
LPARAMETERS toEsp, tcIndDivCom, tlRedimensionar

*- tcIndDivCom = '1' (libre)
*- tcIndDivCom = '2' (Combinada)
*- tlRedimensionar = indicasi debe redimensionar el array

*- Busca una Garantia y Pasa los valores al array de GarantasTodas
LOCAL ;
	lnContador, lnContadorTodas, i, j, k
lnContador = 0
lnContadorTodas = 0

LOCAL ARRAY laGarTodas [alen(toEsp.aGarantiaTodas,1) , alen(toEsp.aGarantiaTodas,2) ]
ACOPY (toEsp.aGarantiaTodas,laGarTodas)

LOCAL ARRAY laGar [alen(toEsp.aGarantia,1) , alen(toEsp.aGarantia,2) ]
ACOPY (toEsp.aGarantia,laGar)

*- Libres
IF tcIndDivCom = '1'
	*- Paso las libres al aGarantiaTodas


	*- Las borro a todas las 999 de aGarTodas
	lnMax=ALEN(laGarTodas,1)
	i=1
	DO WHILE i <= lnMax
		IF SUBSTR(laGarTodas(i,1),1,3) = '999'
			oLibreria.Array_Eliminar(@laGarTodas ,.T.,i)
			lnMax=lnMax -1
		ELSE
			i=i+1
		ENDIF
	ENDDO
	**SET STEP  ON
	*- Copio las libres al array laGarTodas
	FOR i=1 TO ALEN(laGar,1)
		IF SUBSTR(laGar(i,1),1,3) = '999'
			DIME laGarTodas( ALEN(laGarTodas,1) + 1 , ALEN(laGarTodas,2) )
			oLibreria.Array_CopiarFila(i, @laGar, ALEN(laGarTodas,1), @laGarTodas)
		ENDIF

	ENDFOR

	*- Ahora recorro laGar y copio los valores en la equivalente de laGarTodas
	FOR i=1 TO ALEN(laGar,1)
		FOR j=1 TO ALEN(laGarTodas,1)
			IF laGar(i,1)=laGarTodas(j,1)
				*- Encontro la Garantia equivalente
				FOR k=1 TO ALEN(laGar,2)
					*- Recorro por columnas y las copio
					laGarTodas (j,k) = laGar(i,k)
				ENDFOR
				EXIT
			ENDIF
		ENDFOR
	ENDFOR

	DIME toEsp.aGarantia(ALEN(laGar,1) , ALEN(laGar,2))
	ACOPY (laGar,toEsp.aGarantia)

	DIME toEsp.aGarantiaTodas(ALEN(laGarTodas,1) , ALEN(laGarTodas,2))
	ACOPY (laGarTodas,toEsp.aGarantiaTodas)


	*!*		FOR i = 1 TO ALEN(toEsp.aGarantia,1)
	*!*			IF SUBSTR(toEsp.aGarantia(i,1),1,3) = '999'
	*!*				lnContador= lnContador + 1
	*!*			ENDIF
	*!*		ENDFOR

	*!*		FOR i = 1 TO ALEN(toEsp.aGarantiaTodas,1)
	*!*			IF SUBSTR(toEsp.aGarantiaTodas(i,1),1,3) = '999'
	*!*				lnContadorTodas = lnContadorTodas + 1
	*!*			ENDIF
	*!*		ENDFOR

	*!*		DO CASE
	*!*			CASE lnContador > lnContadorTodas AND  lnContador - lnContadorTodas > 0
	*!*				*- Agregar aGarantiaTodas
	*!*				FOR i = 1  TO lnContador -1  && porq existe al menos una garantia
	*!*					DIME toEsp.aGarantiaTodas (ALEN(toEsp.aGarantiaTodas,1) + 1 , ALEN(toEsp.aGarantiaTodas,2) )
	*!*					toEsp.IniciarGarantiaTodas( ALEN(toEsp.aGarantiaTodas,1) )
	*!*					toEsp.Ultimo999 = toEsp.Ultimo999 + 1
	*!*					toEsp.aGarantiaTodas( ALEN(toEsp.aGarantiaTodas,1) , 1 ) = '999' + PADL(ALLTRIM(STR(toEsp.Ultimo999)),3,'0')
	*!*				ENDFOR
	*!*			CASE lnContadorTodas > lnContador
	*!*				* 29-10-02 DIME toEsp.aGarantiaTodas (ALEN(toEsp.aGarantia,1) , ALEN(toEsp.aGarantiaTodas,2) )
	*!*		ENDCASE
ENDIF


IF tcIndDivCom = '1'
	*- Diversos (con Libres)
	*!*		LOCAL lnUltimo999999
	*!*		lnUltimo999999 = 0

	*!*		FOR i = 1 TO ALEN(toEsp.aGarantia,1)
	*!*			FOR j = 1 TO ALEN(toEsp.aGarantiatodas,1)
	*!*				IF SUBSTR(toEsp.aGarantia (i,1),1,3) = SUBSTR(toEsp.aGarantiaTodas(j,1),1,3)

	*!*					IF SUBSTR(toEsp.aGarantia (i,1),1,3) = '999'
	*!*						IF j > lnUltimo999999
	*!*							lnUltimo999999 = j
	*!*							FOR k=1 TO ALEN(toEsp.aGarantia,2)
	*!*								toEsp.aGarantiaTodas(j,k) = toEsp.aGarantia(i,k)
	*!*							ENDFOR
	*!*							EXIT
	*!*						ENDIF
	*!*					ELSE
	*!*						FOR k=1 TO ALEN(toEsp.aGarantia,2)
	*!*							toEsp.aGarantiaTodas(j,k) = toEsp.aGarantia(i,k)
	*!*						ENDFOR
	*!*						EXIT
	*!*					ENDIF
	*!*				ENDIF
	*!*			ENDFOR
	*!*		ENDFOR
ELSE
	*- Sin garantias Libres
	FOR i = 1 TO ALEN(toEsp.aGarantia,1)
		FOR j = 1 TO ALEN(toEsp.aGarantiatodas,1)
			IF toEsp.aGarantia (i,1) = toEsp.aGarantiaTodas(j,1)
				*- Encontro la garantia y copio los valores -*
				FOR k=1 TO ALEN(toEsp.aGarantia,2)
					toEsp.aGarantiaTodas(j,k) = toEsp.aGarantia(i,k)
				ENDFOR
				EXIT
			ENDIF
		ENDFOR
	ENDFOR
ENDIF

ENDPROC
PROCEDURE desglosar
LPARAMETERS toEsp, tcAccion, tcTipOperacion
* tcAccion [ParaTransmitir, ParaTarificar]

*- Desglosa las garantias agrupadas, en las respectivas de Mpafre q entiende el host

*- Recupero los capitales de la 015000 y 016000
LOCAL 	;
	lnCapi015000,	lnCapi016000,;
	lnPrima015000,	lnPrima016000,;
	lnId010000, 	lnId016000, lnId015000

STORE 0  TO lnCapi015000, lnId016000, lnId015000, lnCapi016000, lnPrima015000,lnPrima016000, lnId010000

*- Recorro la matriz buscando
FOR i=1 TO ALEN(toEsp.aGarantiaTodas,1)
	DO CASE
			*- Contenido
		CASE toEsp.aGarantiaTodas(i,1) = '015000'
			lnId015000		= i
			lnCapi015000  	= toEsp.aGarantiaTodas(i,4)
			lnPrima015000 	= toEsp.aGarantiaTodas(i,6)

			*- Continente
		CASE toEsp.aGarantiaTodas(i,1) = '016000'
			lnId016000		= i
			lnCapi016000  	= toEsp.aGarantiaTodas(i,4)
			lnPrima016000 	= toEsp.aGarantiaTodas(i,6)

			*- RC
		CASE toEsp.aGarantiaTodas(i,1) = '010000'
			lnId010000		= i
	ENDCASE
ENDFOR

DO CASE
		*- Multiriesgo Caja Madrid
	CASE toEsp.TratEspecial='018'
*!*			IF lnId010000 = 0
*!*				*- Agrega la garantia
*!*				LOCAL ARRAY laTemp(ALEN(toEsp.aGarantia,1) , ALEN(toEsp.aGarantia,2))
*!*				ACOPY(toEsp.aGarantia , laTemp)
*!*				THIS.Insertar_garantia( @laTemp, toEsp.Modalidad, '074', '010000', 150253.03, 0.06, 9.02)
*!*				DIME toEsp.aGarantia (ALEN(laTemp,1) , ALEN(laTemp,2))
*!*				ACOPY (laTemp, toEsp.aGarantia)
*!*			ELSE
*!*				toEsp.aGarantiaTodas(lnId010000,4) 	= 150253.03
*!*				toEsp.aGarantiaTodas(lnId010000,5) 	= 0.06
*!*				toEsp.aGarantiaTodas(lnId010000,6)	= 9.02
*!*			ENDIF

*!*			*- Resto de Contenido o Continente la prima de RC
*!*			DO CASE
*!*				CASE  lnId015000#0 AND lnId016000#0
*!*					toEsp.aGarantiaTodas(lnId015000,6) = toEsp.aGarantiaTodas(lnId015000,6) - 4.51
*!*					toEsp.aGarantiaTodas(lnId016000,6) = toEsp.aGarantiaTodas(lnId016000,6) - 4.51
*!*					
*!*				CASE  lnId015000#0 AND lnId016000=0
*!*					toEsp.aGarantiaTodas(lnId015000,6) = toEsp.aGarantiaTodas(lnId015000,6) - 9.02
*!*				
*!*				CASE  lnId015000=0 AND lnId016000#0
*!*					toEsp.aGarantiaTodas(lnId016000,6) = toEsp.aGarantiaTodas(lnId016000,6) - 9.02
*!*			ENDCASE

		*- COMBINADA HOGAR Caja Madrid
	CASE toEsp.TratEspecial='001'

		IF tcAccion= 'ParaTransmitir'
			*- Tratamiento de RC
			IF lnId010000 # 0
				toEsp.aGarantiaTodas(lnId010000,4) 	= 150253.03 	&& 
				*		toEsp.aGarantiaTodas(lnId010000,6)	= 9.02			&& 

				*- 29/01/2002 - Hablado con el host que se envia prima = 0 y capital = 25.000.000 pts
				toEsp.aGarantiaTodas(lnId010000,6)	= 0.00

			ENDIF
		ENDIF


		*- Cargamos los valores en las garantias Todas, que sern las reales
		FOR i=1 TO ALEN(toEsp.aGarantiaTodas,1)
			DO CASE
					*- Trat. Asistencia al hogar
				CASE toEsp.aGarantiaTodas(i,1) 	= '012000'

					IF toEsp.aGarantiaTodas(i,6) # toEsp.OldPrima012000
						toEsp.aGarantiaTodas(i,6)	= 5.05
					ELSE
						toEsp.aGarantiaTodas(i,6) = toEsp.OldPrima012000
					ENDIF

					*- Trat. contenido
				CASE toEsp.aGarantiaTodas(i,1) 	= '015001'
					toEsp.aGarantiaTodas(i,4) 	= lnCapi015000
					toEsp.aGarantiaTodas(i,6)	= lnPrima015000	* 0.26

				CASE toEsp.aGarantiaTodas(i,1) 	= '015002'
					toEsp.aGarantiaTodas(i,4) 	= lnCapi015000
					toEsp.aGarantiaTodas(i,6)	= lnPrima015000	* 0.20

				CASE toEsp.aGarantiaTodas(i,1) 	= '015003'
					toEsp.aGarantiaTodas(i,4) 	= lnCapi015000
					toEsp.aGarantiaTodas(i,6)	= lnPrima015000	* 0.17

				CASE toEsp.aGarantiaTodas(i,1) 	= '015004'
					toEsp.aGarantiaTodas(i,4) 	= lnCapi015000
					toEsp.aGarantiaTodas(i,6)	= lnPrima015000	* 0.30

				CASE toEsp.aGarantiaTodas(i,1) 	= '015005'
					IF lnCapi015000#0
						toEsp.aGarantiaTodas(i,4) 	= IIF(toEsp.OldCap015005 # 0, toEsp.OldCap015005,lnCapi015000)
						toEsp.aGarantiaTodas(i,6)	= lnPrima015000	* 0.07
					ELSE
						toEsp.aGarantiaTodas(i,4) 	= 0.00
						toEsp.aGarantiaTodas(i,6)	= 0.00
					ENDIF


					*- Trat. Continente
				CASE toEsp.aGarantiaTodas(i,1) 	= '016001'
					IF  toEsp.Vvda1Riesgo = 1
						toEsp.aGarantiaTodas(i,4) 	= lnCapi016000
						toEsp.aGarantiaTodas(i,6)	= lnPrima016000	* (1.05 /6)
					ELSE
						toEsp.aGarantiaTodas(i,4) 	= lnCapi016000
						toEsp.aGarantiaTodas(i,6)	= lnPrima016000	* 0.25
					ENDIF

				CASE toEsp.aGarantiaTodas(i,1) 	= '016002'
					IF  toEsp.Vvda1Riesgo = 1
						toEsp.aGarantiaTodas(i,4) 	= lnCapi016000
						toEsp.aGarantiaTodas(i,6)	= lnPrima016000	* (3.05 /6)
					ELSE
						toEsp.aGarantiaTodas(i,4) 	= lnCapi016000
						toEsp.aGarantiaTodas(i,6)	= lnPrima016000	* 0.53
					ENDIF

				CASE toEsp.aGarantiaTodas(i,1) 	= '016003'
					IF  toEsp.Vvda1Riesgo = 1
						toEsp.aGarantiaTodas(i,4) 	= lnCapi016000
						toEsp.aGarantiaTodas(i,6)	= lnPrima016000	* (1.55 /6)
					ELSE
						toEsp.aGarantiaTodas(i,4) 	= lnCapi016000
						toEsp.aGarantiaTodas(i,6)	= lnPrima016000	* 0.17
					ENDIF

				CASE toEsp.aGarantiaTodas(i,1) 	= '016004'
					IF  toEsp.Vvda1Riesgo = 1
						toEsp.aGarantiaTodas(i,4) 	= lnCapi016000
						toEsp.aGarantiaTodas(i,6)	= lnPrima016000	* (0.35 /6)
					ELSE
						toEsp.aGarantiaTodas(i,4) 	= lnCapi016000
						toEsp.aGarantiaTodas(i,6)	= lnPrima016000	* 0.05
					ENDIF

				CASE toEsp.aGarantiaTodas(i,1) 	= '016006'
					IF tcTipOperacion='1'
						IF lnCapi016000#0 && tiene continente
							toEsp.aGarantiaTodas(i,4) 	= 601.01
							toEsp.aGarantiaTodas(i,6)	= 0.00
						ELSE
							toEsp.aGarantiaTodas(i,4) 	= 0.00
							toEsp.aGarantiaTodas(i,6)	= 0.00
						ENDIF
					ELSE
						IF toEsp.OldCap016006=0	&& no la mando el host
							IF lnCapi016000#0	&& contrato continente
								toEsp.aGarantiaTodas(i,4) 	= 601.01
								toEsp.aGarantiaTodas(i,6)	= 0.00
							ELSE
								toEsp.aGarantiaTodas(i,4)	= 0.00
								toEsp.aGarantiaTodas(i,6)	= 0.00
							ENDIF
						ELSE	&& la mando el host
							IF lnCapi016000#0	&& tiene continente
								toEsp.aGarantiaTodas(i,4)	= toEsp.OldCap016006
								toEsp.aGarantiaTodas(i,6)	= 0.00
							ELSE	&& quito continente
								toEsp.aGarantiaTodas(i,4)	= 0.00
								toEsp.aGarantiaTodas(i,6)	= 0.00
							ENDIF
						ENDIF
					ENDIF
			ENDCASE
		ENDFOR
ENDCASE


ENDPROC
PROCEDURE vaoconstruccion
*!*	LPARAMETERS toEsp
*!*	local tcRet
*!*	tcRet = "0"

*!*	if empty(toEsp.AoConstruccion)
*!*		tcRet = 'V0024'+'0'
*!*	endif	

*!*	retu tcRet
ENDPROC
PROCEDURE sincronizar
LPARAMETERS toEsp, tcRamo, tcModalidad, tcAccion, tcIndDivCom
*- Sincroniza el Capital, Tasa y Suma

*- tcAccion = 1 pasar de aGarantiaTodas -> aGarantia
*- tcAccion = 2 pasar de aGarantia		-> aGarantiaTodas

DO CASE
	CASE tcAccion = 1
		*- Pasar de aGarantiaTodas -> aGarantia,    Vuelco los valores del real al array q ve el usuario
		FOR i = 1 TO ALEN( toEsp.aGarantia,1)

			*- Inicio los Valores
			toEsp.aGarantia(i,4) = 0
			toEsp.aGarantia(i,5) = 0
			toEsp.aGarantia(i,6) = 0

			FOR j = 1 TO ALEN (toEsp.aGarantiaTodas,1)
				IF toEsp.aGarantia(i,1) = toEsp.aGarantiaTodas(j,1)
					toEsp.aGarantia(i,4) = toEsp.aGarantiaTodas(j,4)
					toEsp.aGarantia(i,5) = toEsp.aGarantiaTodas(j,5)
					toEsp.aGarantia(i,6) = toEsp.aGarantiaTodas(j,6)
				ENDIF
			ENDFOR
		ENDFOR

	CASE tcAccion = 2
		*- Pasar de aGarantia -> aGarantiaTodas,
		IF tcIndDivCom = '1'  
			*- Diversos Garantias Libres
			*- Pasa las Garantas al array de garantias reales y redimensiona el array real
			this.PasarGarantia(toEsp, tcIndDivCom, .t.)
		ELSE
			*- Solo Garantias Combinadas, no hay Libres
			FOR i = 1 TO ALEN( toEsp.aGarantiaTodas,1)
				*- Inicio los Valores
				toEsp.aGarantiaTodas(i,4) = 0
				toEsp.aGarantiaTodas(i,5) = 0
				toEsp.aGarantiaTodas(i,6) = 0

				FOR j = 1 TO ALEN (toEsp.aGarantia,1)
					IF toEsp.aGarantiaTodas(i,1) = toEsp.aGarantia(j,1)
						toEsp.aGarantiaTodas(i,4) = toEsp.aGarantia(j,4)
						toEsp.aGarantiaTodas(i,5) = toEsp.aGarantia(j,5)
						toEsp.aGarantiaTodas(i,6) = toEsp.aGarantia(j,6)
					ENDIF
				ENDFOR
			ENDFOR
		ENDIF
ENDCASE

*!*	THIS.aGarantia(tnFila,1)	=''			&& codigo
*!*	THIS.aGarantia(tnFila,2)	=''			&& texto garantia
*!*	THIS.aGarantia(tnFila,3)	=''			&& tipo de garantia ,1=obligatoria, 2=no obliga,3=personal usuario
*!*	THIS.aGarantia(tnFila,4)	=0.00		&& suma
*!*	THIS.aGarantia(tnFila,5)	=0.00		&& tasa
*!*	THIS.aGarantia(tnFila,6)	=0.00		&& prima
*!*	THIS.aGarantia(tnFila,7)	=0			&& IdOrden de la Garantia
*!*	THIS.aGarantia(tnFila,8)	=''			&& Ra_codig (1,2,3) (1= Oculto, 2=Visible Modificable, 3=Visble no modificable)
*!*	THIS.aGarantia(tnFila,9) 	=''			&& ra_desg	codigo de desglose
*!*	THIS.aGarantia(tnFila,10)	=''			&& ra_Cobgar	tipo de garantia
*!*	THIS.aGarantia(tnFila,11)	=0			&& ra_capital tipo de capital
*!*	THIS.aGarantia(tnFila,12)	=''	 		&& ra_Transmitir 0=NO  1=si

ENDPROC
PROCEDURE calcularconsorcio99
lparameters toEsp
local lnTotal
lntotal=0
for i =1 to  alen(toEsp.aGarantiaTodas,1)
	if toEsp.aGarantiaTodas(i,9)='99'
		lnTotal = lnTotal + toEsp.aGarantiaTodas(i,6)
	endif
endfor		
retu lnTotal
ENDPROC
PROCEDURE recalcular_tasas
LPARAMETERS toEsp
*- Recalcula las tasas de las garantias.

LOCAL;
	lnFactorTasa
lnFactorTasa=0

IF INLIST(toEsp.TratEspecial,'024','025')
	lnFactorTasa=1
ELSE
	*- Para que la tasa sea por 1000
	lnFactorTasa=1000
ENDIF

*- Ajusto las tasas del array real de aGarantiaTodas
FOR i = 1 TO ALEN( toEsp.aGarantiaTodas,1)
	IF toEsp.aGarantiaTodas(i,4) # 0
		IF toEsp.aGarantiaTodas(i,4) # 0
			toEsp.aGarantiaTodas(i,5) = toEsp.aGarantiaTodas(i, 6) * lnFactorTasa / toEsp.aGarantiaTodas(i,4)
		ELSE
			toEsp.aGarantiaTodas(i,5) = 0
		ENDIF
	ENDIF
ENDFOR


*- Ajusto las tasas del array aGarantia (visual)
FOR i = 1 TO ALEN( toEsp.aGarantia,1)
	IF toEsp.aGarantia(i,4) # 0
		IF toEsp.aGarantia(i,4) # 0
			toEsp.aGarantia(i,5) = toEsp.aGarantia(i, 6) * lnFactorTasa / toEsp.aGarantia(i,4)
		ELSE
			toEsp.aGarantia(i,5) = 0
		ENDIF
	ENDIF
ENDFOR

ENDPROC
PROCEDURE insertarpadre
LPARAMETERS taEspGar, taGarTodas, tnFila

*- Para padres e hijas -*
LOCAL ;
	lnRet, i, lcRa_coverPadre, llExiste, lnNuevaFila, lnIdPadre

lcRa_coverPadre	=''
llExiste		=.F.
lnIdPadre		=0

DO CASE
	CASE taEspGar( tnfila , 10 )='F'
		*- Falsa ' A'  - es como una A pero en realidad es G


	CASE taEspGar( tnfila , 10 )='A'
		*- cobertura sin expansion, no tiene hijas -*

	CASE taEspGar( tnfila , 10 )='C'
		*- cobertura CON expansion, y tiene hijas, no hacer nada-*

	CASE taEspGar( tnfila , 10 )='G'
		*- Cobertura q expande a 'C' -*
		*- Busco la garantia Padre y Obtengo el id -*
		FOR i = 1 TO ALEN(taGarTodas , 1 )
			IF taGarTodas(i,10) = 'C' AND SUBSTR(taGarTodas(i,1), 1,3) =  SUBSTR(taEspGar(tnFila ,1) ,1,3)
				lnIdPadre	 		= i
				lcRa_coverPadre 	= taGarTodas(i,1)
				EXIT
			ENDIF
		ENDFOR


		*- Busco el padre en la matriz del especifico para ver si ya existe-*
		FOR i = 1 TO ALEN(taEspGar,1)
			IF taEspGar(i,1) = lcRa_coverPadre
				llExiste = .T.
				EXIT
			ENDIF
		ENDFOR

		IF llExiste OR lnIdPadre=0
			*- Ya existe la garantia padre en la lista no agregarla -*
			*- O no existe en la tabla emdw0002
		ELSE
			*- No existe, entonces agregar el padre
			lnNuevaFila=ALEN(taEspGar,1)+1
			DIME taEspGar(lnNuevaFila,ALEN(taEspGar,2))

			FOR j = 1 TO ALEN(taEspGar,2)
				taEspGar(lnNuevaFila, j) = taGarTodas(lnIdPadre, j )
			ENDFOR
		ENDIF
ENDCASE


ENDPROC
PROCEDURE v30073cajmet001
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC
* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos
*** ****** ** *******SET STEpep on

LOCAL ;
	loError, loEsp, loEspC, lnTemp,;
	lnRet, lcRet, llError, llEncontro, ln016000, ln005154, ln005155, ln015000, ln013000, ln018019, ln006000, ln158000, ln157000, ln023000, ln156000

loError = toContenedor.oError
loEsp	= toContenedor.oApEsp

lnRet='0'
lnRet=0
lnTemp=0
llError=.F.
llEncontro=.F.

IF TYPE('toContenedorC')='O'
	loEspC=toContenedorC.oApEsp
ENDIF

STORE 0 TO ln016000, ln015000, ln005154, ln005155, ln013000, ln018019, ln006000, ln158000, ln157000, ln023000, ln156000

WITH loEsp

	*- Validacion del los datos comunes al riesgo
	* ** *****
	THIS.val_riesgo(toContenedor,iif(TYPE('toContenedorC')='O',toContenedorC,''))

	*- Cesion de derecho
	IF TYPE('toContenedorC')='O' AND INLIST(loUsua.TipOperacion,'3','4','8')
		IF loUsua.TipOperacion='8' AND !EMPTY(.CesionTextoCajaMadrid) OR !EMPTY(.CesionTexto) OR !EMPTY(.Beneficiario)

			*- Datos de la Cesin de Derechos
			IF .CesionTextoCajaMadrid # loEspC.CesionTextoCajaMadrid  OR .CesionTexto # loEspC.CesionTexto OR .Beneficiario # loEspC.Beneficiario
				loError.inser_er("C00011","oEspRiesgo","Cambio de Cesin de Derechos",'','')
			ENDIF

			*- Datos de la Cesin de Derechos	-  Codigo Postales
			IF toContenedor.OSITRIES.CODPOSTH # toContenedorC.OSITRIES.CODPOSTH
				loError.inser_er("C00011","oEspRiesgo","Cesin de Derecho y cambio direccin Riesgo",'','')
			ENDIF

			*- Datos del tomador
			IF 		( toContenedor.otomador.apel1 # toContenedorC.otomador.apel1 );
					OR 	( toContenedor.otomador.apel2 # toContenedorC.otomador.apel2 );
					OR 	( toContenedor.otomador.nombre # toContenedorC.otomador.nombre );
					OR  ( toContenedor.otomador.NUMDOC # toContenedorC.otomador.NUMDOC )

				loError.inser_er("C00011","oEspRiesgo","Cesin de Derecho y cambio datos del tomador",'','')
			ENDIF
		ELSE
			*- Codigo Postales - Direccin Riesgo
			IF toContenedor.OSITRIES.CODPOSTH # toContenedorC.OSITRIES.CODPOSTH
				loError.inser_er("C00011","oEspRiesgo","Cambio direccin Riesgo",'','')
			ENDIF

			*- Datos del tomador
			IF 		( toContenedor.otomador.apel1 # toContenedorC.otomador.apel1 );
					OR 	( toContenedor.otomador.apel2 # toContenedorC.otomador.apel2 );
					OR 	( toContenedor.otomador.nombre # toContenedorC.otomador.nombre );
					OR  ( toContenedor.otomador.NUMDOC # toContenedorC.otomador.NUMDOC )

				loError.inser_er("C00011","oEspRiesgo","Cambio datos del tomador",'','')
			ENDIF
		ENDIF
	ENDIF

	*- Ids, para tratar las garantas
	FOR i = 1 TO ALEN(loEsp.aGarantia,1)
		IF loEsp.aGarantia(i,1)='015000'
			ln015000 = i
		ENDIF
		IF loEsp.aGarantia(i,1)='016000'
			ln016000 = i
		ENDIF
		IF loEsp.aGarantia(i,1)='157000'
			ln157000 = i
		ENDIF
		IF loEsp.aGarantia(i,1)='023000'
			ln023000 = i
		ENDIF
		IF loEsp.aGarantia(i,1)='005154'
			ln005154 = i
		ENDIF
		IF loEsp.aGarantia(i,1)='005155'
			ln005155 = i
		ENDIF
		IF loEsp.aGarantia(i,1)='013000'
			ln013000 = i
		ENDIF
		IF loEsp.aGarantia(i,1)='018019'
			ln018019 = i
		ENDIF
		IF loEsp.aGarantia(i,1)='006000'
			ln006000 = i
		ENDIF
		IF loEsp.aGarantia(i,1)='158000'
			ln158000 = i
		ENDIF
		IF loEsp.aGarantia(i,1)='156000'
			ln156000 = i
		ENDIF

	ENDFOR


	*-----------------------------------------------------------------*
	*- Si es bobo, no tiene que validar las garantas y cosas asociadas
	*-----------------------------------------------------------------*
	IF loUsua.TipOperacion='8'
		RETU
	ENDIF

	*- Atraco fuera del Hogar con Contenido
	IF ln156000 # 0 AND ln015000 = 0
		loError.inser_er("V00240","oEspRiesgo","Atraco fuera del hogar sin Contenido",'','')
	ENDIF

	*- Validacion de las netas minimas
	*	lnTemp=toContenedor.oBusRecibo.BuscaConcepto(2,'1')
	lnTemp=toContenedor.oBusRecibo.BuscaConcepto(2,'A')
	IF .PrimaTot # 0 AND lnTemp#0 AND tcTipoTarifa='S'
		THIS.vNetaMinima ( loEsp, toContenedor.oApRecibo.FORMAPAGO, lnTemp , loError )
	ENDIF

	*- Agente
	IF EMPTY(loUsua.Agente)
		loError.inser_er("V00241","oEspRiesgo","Agente no introducido",'','')
	ENDIF

	*- Validacion del ao de Construccion
	IF EMPTY(loEsp.AoConstruccion) AND toContenedor.oUsua.TipOperacion='1'
		loError.inser_er("V00240","oEspRiesgo","Ao de Construccin",'','')
	ENDIF


	*- Validacion de los Metros construidos
	IF EMPTY(loEsp.MetroConstruido) AND toContenedor.oUsua.TipOperacion='1'
		loError.inser_er("V00240","oEspRiesgo","Metros Construido",'','')
	ENDIF

	*- Nro de garantas contratadas
	SELECT * FROM CurGarantia WHERE !EMPTY(ra_cover) INTO CURSOR cTemp
	IF _TALLY=0
		loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
		RETU
	ENDIF


	*- Validacion en Tasa Manual sobre las garantias y primas no nulas y tasas
	IF tcTipoTarifa='N'
		SELECT ra_cover FROM CurGarantia WHERE EMPTY(PRIMA) AND EMPTY(tasa) INTO CURSOR cTemp
		IF _TALLY#0
			loError.inser_er("V00240","oEspRiesgo",'Ha seleccionado Tasa Manual, no ha introducido Prima o Tasa','','')
			RETU
		ENDIF
	ENDIF

	*- Debe existir contenido o continente
	IF EMPTY(ln015000) AND EMPTY(ln016000)
		loError.inser_er("V00240","oEspRiesgo","Contenido y/o Continente no contratado",'','')
	ENDIF


	*- Ids, para tratar los suplementos
	LOCAL ;
		ln015000c, ln013000c, ln016000c, ln010000c, ln012000c, ln005154c, ln005155c, ln156000c, ln157000c, ln023000c, ln006000c, ln158000c, ln150000c

	STORE 0 TO ln015000c, ln013000c, ln016000c, ln010000c, ln012000c, ln005154c, ln005155c, ln156000c, ln157000c, ln023000c, ln006000c, ln158000c, ln150000c

	IF INLIST(loUsua.TipOperacion,'3','4') AND TYPE('loEspC')='O'

		STORE 0 TO ln013000c, ln016000c, ln010000c, ln012000c, ln005154c, ln005155c, ln156000c, ln157000c, ln023000c, ln006000c, ln158000c, ln150000c

		FOR i = 1 TO ALEN(loEspC.aGarantia,1)
			IF loEspC.aGarantia(i,1)='013000'
				ln013000c=i
			ENDIF
			IF loEspC.aGarantia(i,1)='016000'
				ln016000c = i
			ENDIF
			IF loEspC.aGarantia(i,1)='015000'
				ln015000c = i
			ENDIF
			IF loEspC.aGarantia(i,1)='010000'
				ln010000c = i
			ENDIF
			IF loEspC.aGarantia(i,1)='012000'
				ln012000c=i
			ENDIF
			IF loEspC.aGarantia(i,1)='005154'
				ln005154c = i
			ENDIF
			IF loEspC.aGarantia(i,1)='005155'
				ln005155c = i
			ENDIF
			IF loEspC.aGarantia(i,1)='156000'
				ln156000c=i
			ENDIF
			IF loEspC.aGarantia(i,1)='157000'
				ln157000c=i
			ENDIF
			IF loEspC.aGarantia(i,1)='023000'
				ln023000c=i
			ENDIF
			IF loEspC.aGarantia(i,1)='006000'
				ln006000c=i
			ENDIF
			IF loEspC.aGarantia(i,1)='158000'
				ln158000c=i
			ENDIF
		ENDFOR
	ENDIF

	*- Vvda a mas de 1 km y Capital de Joyas en Mueble cerrado
	IF ln005155 # 0 AND loEsp.Vvda1km='S'
		DO CASE

			CASE loUsua.TipOperacion='1' AND .aGarantia(ln005155,4) > 6010.12
				loError.inser_er("C00011","oEspRiesgo","Contratacin joyas en mueble cerrado a mas de 1km de ncleo urbano",'','')

			CASE INLIST(loUsua.TipOperacion,'3','4') AND TYPE('loEspC')='O'
				IF  ln005155c # 0
					IF .aGarantia(ln005155,4) # loEspC.aGarantia(ln005155c,4) AND .aGarantia(ln005155,4) > 6010.12
						loError.inser_er("C00011","oEspRiesgo","Contratacin joyas en mueble cerrado a mas de 1km de ncleo urbano",'','')
					ENDIF
				ELSE
					*- Recien Contratada
					IF .aGarantia(ln005155,4) > 6010.12
						loError.inser_er("C00011","oEspRiesgo","Contratacin joyas en mueble cerrado a mas de 1km de ncleo urbano",'','')
					ENDIF
				ENDIF
		ENDCASE
	ENDIF

	*- Validacion del consorcio
	IF INLIST(loUsua.TipOperacion,'3','4') AND ln018019 = 0
		loError.inser_er("V00240","oEspRiesgo","Consorcio no contratado",'','')
	ENDIF

	*- Validacin de las Garantas necesarias para el clculo de consorcio
	*- si tiene contratada la garantia de consorcio
	IF ln018019 # 0
		SELECT * ;
			FROM curGarantia ;
			WHERE ra_cover IN ('023000','005155','158000','005154','016000','015000') ;
			INTO ARRAY laTemp

		IF 	_TALLY=0
			loError.inser_er("V00240","oEspRiesgo","Consorcio - no puede contratarse",'','')
		ENDIF
	ENDIF

	* - Continente a primer riesgo y capital 6010.12
	*- Pregunta por la opcion porq se esta inicializando cuando se calcula prima
	IF ln016000 # 0 AND loEsp.Vvda1Riesgo=1 AND .aGarantia(ln016000,4) # 6010.12 AND tcOpcion # 'C'
		loError.inser_er("V00240","oEspRiesgo","Continente a 1er riesgo el capital debe ser 6.010,12",'','')
	ENDIF

*!*		*- Continente y vvda secundaria con capital 6010.12
*!*		*- Pregunta por la opcion porq se esta inicializando cuando se calcula prima
*!*		IF ln016000 # 0 AND loEsp.VvdaSecundaria='S' AND .aGarantia(ln016000,4) # 6010.12 AND tcOpcion # 'C'
*!*			loError.inser_er("V00240","oEspRiesgo","Continente y Vivienda secundaria, el capital debe ser 6.010,12",'','')
*!*		ENDIF

	* - Continente a primer riesgo exclusivamente cuando el Tomador actue en calidad de Inquilino.
	IF ln016000 # 0 AND loEsp.Vvda1Riesgo=1 AND loEsp.Titularidad='1' && contratada y no inquilino
		loError.inser_er("V00240","oEspRiesgo","Continente a 1er riesgo como propietario, exclusivamente para inquilino",'','')
	ENDIF

	*- Validacin de contenido para contratar otras garantas
	IF ln015000 = 0 AND (ln005154 # 0 OR ln005155 # 0 OR ln157000 # 0 OR ln023000 # 0)
		loError.inser_er("V00240","oEspRiesgo","Contenido no Contratado",'','')
	ENDIF

	*- Validacin de continente y Ampliacion de daos estticos
	IF ln016000 = 0 AND ln006000 # 0
		loError.inser_er("V00240","oEspRiesgo","Ampliacion de daos estticos - Continente no Contratado",'','')
	ENDIF

	*- Validacin de continente y Reconstruccin de Jardines
	IF ln016000 = 0 AND ln158000 # 0
		loError.inser_er("V00240","oEspRiesgo","Reconstruccin de Jardines - Continente no Contratado",'','')
	ENDIF

	*- Validacion Caja Fuerte y Mueble Cerrado - Tiene que existir Contenido
	IF ln005154 # 0 AND ln015000 = 0
		loError.inser_er("V00240","oEspRiesgo","Joyas en Caja Fuerte - Garanta de Contenido no Contratada",'','')
	ENDIF
	IF ln005155 # 0 AND ln015000 = 0
		loError.inser_er("V00240","oEspRiesgo","Joyas en Mueble Cerrado - Garanta de Contenido no Contratada",'','')
	ENDIF


	*- Reconstruccion de Jardines
	IF ln158000 # 0 AND .aGarantia(ln158000 ,4)=0 AND .aGarantia(ln158000 ,6)=0
		loError.inser_er("V00240","oEspRiesgo","Reconstruccin de Jardines - Capital y  Prima no pueden ser 0",'','')
	ENDIF

	*- Ampliacion daos esteticos
	IF ln006000 # 0 AND .aGarantia(ln006000,4)=0 AND .aGarantia(ln006000,6)=0
		loError.inser_er("V00240","oEspRiesgo","Ampliacin daos estticos - Capital y  Prima no pueden ser 0",'','')
	ENDIF

	*- Validacion Daos Estticos y Reconstruccin de Jardines - Tiene que existir Continente
	IF ln006000 # 0 AND ln016000 = 0
		loError.inser_er("V00240","oEspRiesgo","Ampliacin daos estticos - Garanta de Continente no Contratada",'','')
	ENDIF
	IF ln158000 # 0 AND ln016000 = 0
		loError.inser_er("V00240","oEspRiesgo","Reconstruccin de Jardines - Garanta de Continente no Contratada",'','')
	ENDIF

	DO CASE
			*- Tratamiento del Ramo 0202, 0210
		CASE INLIST(.ModalProd ,'0202','0210')
			IF   .omCobContinente='S' AND .omCodSobrePrimaConti='1' && SOBRE PRIMA DE ANTENA DE RADIO AFICIONADO
				loError.inser_er("V00240","oEspRiesgo","Descripcin del Riesgo",'','')
			ENDIF
			IF toContenedor.oUsua.TipOperacion = '1' AND (YEAR(DATE()) - .AoConstruccion) > 25
				loError.inser_er("V00240","oEspRiesgo","Ao Construccion",'','')
			ENDIF

			FOR i = 1 TO ALEN(.aGarantia,1)
				IF INLIST(.aGarantia(i,1) , '158000' , '006000')  && ampliacion danios estticos, reconst. de jardines
					loError.inser_er("V00240","oEspRiesgo",SUBSTR(.aGarantia(i,2),3,LEN(.aGarantia(i,2)))+" Garantas Contratadas",'','')
				ENDIF
			ENDFOR

			*- Tratamiento del Ramo 0240
		CASE .ModalProd = '0240'
			IF  .Vvda1Riesgo=1 OR ;   && tiene contratada
				.DefensaJuridicaAmplia=1 OR;&&tiene contratada
				loError.inser_er("V00240","oEspRiesgo","Descripcin del Riesgo.",'','')
			ENDIF
			FOR  i = 1 TO ALEN(.aGarantia,1)
				IF INLIST(.aGarantia(i,1) , '005154' , '005155', '156000','157000','023000','006000','158000' )
					loError.inser_er("V00240","oEspRiesgo",SUBSTR(.aGarantia(i,2),3,LEN(.aGarantia(i,2)))+" no permitida",'','')
				ENDIF
			ENDFOR
	ENDCASE

	*- Validacion de los descuentos de Orden Ministerial -*
	IF .omTipoPrima1Ao='S' AND .omTipoPrimaRestoAo='S'
		DO CASE
			CASE loUsua.TipOperacion='1'
				loError.inser_er("V00240","oEspRiesgo","Descuentos de Orden Ministerial de primer ao y aos sucesivos, no permitido",'','')
			CASE INLIST(loUsua.TipOperacion,'3','4') AND TYPE('loEspC')='O'
				IF loEspC.omTipoPrima1Ao # .omTipoPrima1Ao OR loEspC.omTipoPrimaRestoAo # .omTipoPrimaRestoAo
					loError.inser_er("V00240","oEspRiesgo","Descuentos de Orden Ministerial de primer ao y aos sucesivos, no permitido",'','')
				ENDIF
		ENDCASE
	ENDIF
	*- 8/3/2002 - Se cambio la validacion de los desc de OM, segun Joaquin/neira, donde los desc de 1er ao y de aos sucesivos no pueden estar juntos
	*!*		IF .omTipoPrima1Ao='S' AND .omTipoPrimarestoAo='S' AND .omCodRestoAo='13'
	*!*			loError.inser_er("V00240","oEspRiesgo","Descuentos Orden Ministerial",'','')
	*!*		ENDIF

	*- Validacion de las garantias
	FOR  i = 1 TO ALEN(.aGarantia,1)
		*- Capital minimo para continente por metro es de 420,71 e
		IF .aGarantia(i,1)='016000'
			IF loUsua.TipOperacion='1'
				IF !EMPTY(.MetroConstruido)
					DO CASE
							*- Nueva produccion
						CASE loUsua.TipOperacion='1'
							IF  .aGarantia(i,4) < (.MetroConstruido * 420.71)
								loError.inser_er("C00011","oEspRiesgo","Capital Continente inferior en relacin a los metros construdos",'','')
							ENDIF

							*- Suplemento
						CASE INLIST(loUsua.TipOperacion,'3','4') AND TYPE('loEspC')='O'
							IF ln016000c = 0
								*- No tiene la garantia en cartera, entonces la acaba de contratar en el suplemento
								IF .aGarantia(i,4) < (.MetroConstruido * 420.71)
									loError.inser_er("C00011","oEspRiesgo","Capital Continente inferior en relacin a los metros construdos",'','')
								ENDIF
							ELSE
								IF loEspC.aGarantia(ln016000c,4) # loEsp.aGarantia(i,4) AND .aGarantia(i,4) < .MetroConstruido * 420.71
									loError.inser_er("C00011","oEspRiesgo","Capital Continente inferior inferior en relacin a los metros construdos",'','')
								ENDIF
							ENDIF
					ENDCASE
				ELSE
					*-loError.inser_er("V00240","oEspRiesgo","Metros Construdos",'','')
				ENDIF &&!EMPTY(.MetroConstruido)
			ELSE
				*- Nada si es suplemento
			ENDIF	&& loUsua.TipOperacion='1'
		ENDIF


		IF .aGarantia(i,1)='013000'
			DO CASE
				CASE loUsua.TipOperacion='1'
					IF .aGarantia(i,4) # 3005.06 AND tcTipoTarifa='N' && Tasa
						loError.inser_er("C00011","oEspRiesgo","Capital Defensa Jurdica",'','')
					ENDIF

				CASE INLIST(loUsua.TipOperacion,'3','4') AND TYPE('loEspC')='O'
					IF ln013000c=0
						IF  .aGarantia(i,4) # 3005.06 AND tcTipoTarifa='N' && Tasa
							loError.inser_er("C00011","oEspRiesgo","Capital Defensa Jurdica",'','')
						ENDIF
					ELSE
						*- cambio el capital
						IF .aGarantia(i,4) # loEspC.aGarantia(ln013000c,4) AND tcTipoTarifa = 'N' && Tasa
							loError.inser_er("C00011","oEspRiesgo","Capital Defensa Jurdica",'','')
						ENDIF
					ENDIF
			ENDCASE
		ENDIF

		*- Atraco Fuera del hogar
		IF .aGarantia(i,1)='156000'
			DO CASE
				CASE loUsua.TipOperacion='1' AND .aGarantia(i,4) # 450.76
					loError.inser_er("C00011","oEspRiesgo","Capital Atraco fuera del hogar debe ser 450.76",'','')
				CASE INLIST(loUsua.TipOperacion,'3','4') AND TYPE('loEspC')='O'
					IF ln156000c > 0
						IF .aGarantia(i,4) # loEspC.aGarantia(ln156000c,4) AND .aGarantia(i,4) # 450.76
							loError.inser_er("C00011","oEspRiesgo","Capital Atraco fuera del hogar debe ser 450.76",'','')
						ENDIF
					ELSE
						*- No tenia y contrata la garanta
						IF .aGarantia(i,4) # 450.76
							loError.inser_er("C00011","oEspRiesgo","Capital Atraco fuera del hogar debe ser 450.76",'','')
						ENDIF
					ENDIF
			ENDCASE
		ENDIF

		*- Desplazamiento en vaciones
		IF .aGarantia(i,1)='157000'
			DO CASE
				CASE loUsua.TipOperacion='1' AND .aGarantia(i,4) # 3005.06
					loError.inser_er("C00011","oEspRiesgo","Capital Desplazamiento en vaciones debe ser 3005.06",'','')

				CASE INLIST(loUsua.TipOperacion,'3','4') AND TYPE('loEspC')='O'
					IF ln157000c > 0
						IF .aGarantia(i,4) # loEspC.aGarantia(ln157000c,4)  AND .aGarantia(i,4) # 3005.06
							loError.inser_er("C00011","oEspRiesgo","Capital Desplazamiento en vaciones debe ser 3005.06",'','')
						ENDIF
					ELSE
						*- No tenia y contrata la garanta
						IF .aGarantia(i,4) # 3005.06
							loError.inser_er("C00011","oEspRiesgo","Capital Desplazamiento en vaciones debe ser 3005.06",'','')
						ENDIF
					ENDIF
			ENDCASE
		ENDIF

		*- Accidentes corporales
		IF .aGarantia(i,1)='023000'
			DO CASE
				CASE loUsua.TipOperacion='1' AND .aGarantia(i,4) # 6010.12
					loError.inser_er("C00011","oEspRiesgo","Capital Accidentes Corporales debe ser 6010.12",'','')

				CASE INLIST(loUsua.TipOperacion,'3','4') AND TYPE('loEspC')='O'
					IF ln023000c > 0
						IF .aGarantia(i,4) # loEspC.aGarantia(ln023000c,4) AND .aGarantia(i,4) # 6010.12
							loError.inser_er("C00011","oEspRiesgo","Capital Accidentes Corporales debe ser 6010.12",'','')
						ENDIF
					ELSE
						*- No tenia y contrata la garanta
						IF .aGarantia(i,4) # 6010.12
							loError.inser_er("C00011","oEspRiesgo","Capital Accidentes Corporales debe ser 6010.12",'','')
						ENDIF
					ENDIF
			ENDCASE
		ENDIF

		*- Ampliacion daos estticos
		IF .aGarantia(i,1)='006000'
			DO CASE
				CASE loUsua.TipOperacion='1' AND .aGarantia(i,4) # 2404.05
					loError.inser_er("C00011","oEspRiesgo","Capital Ampliacion daos estticos debe ser 2404.05 debe ser 2404.05",'','')

				CASE INLIST(loUsua.TipOperacion,'3','4') AND TYPE('loEspC')='O'
					IF ln006000c > 0
						IF .aGarantia(i,4) # loEspC.aGarantia(ln006000c,4) AND .aGarantia(i,4) # 2404.05
							loError.inser_er("C00011","oEspRiesgo","Capital Ampliacion daos estticos debe ser 2404.05",'','')
						ENDIF
					ELSE
						*- No tenia y contrata la garanta
						IF .aGarantia(i,4) # 2404.05
							loError.inser_er("C00011","oEspRiesgo","Capital Ampliacion daos estticos debe ser 2404.05",'','')
						ENDIF
					ENDIF
			ENDCASE
		ENDIF

		*- Reconstruccin de Jardines
		IF .aGarantia(i,1)='158000'
			*- Esta garantia necesito del capital de continente
			IF ln016000 = 0
				loError.inser_er("C00011","oEspRiesgo","Capital Reconstruccin de Jardines - No contrato Continente",'','')
			ELSE
				DO CASE
					CASE loUsua.TipOperacion='1' AND .aGarantia(i,4) # .aGarantia(ln016000,4) * 0.03
						loError.inser_er("C00011","oEspRiesgo","Capital Reconstruccin de Jardines",'','')

					CASE INLIST(loUsua.TipOperacion,'3','4') AND TYPE('loEspC')='O'
						IF ln158000c > 0
							IF .aGarantia(i,4) # loEspC.aGarantia(ln016000c,4) AND .aGarantia(i,4) # .aGarantia(ln016000,4) * 0.03
								loError.inser_er("C00011","oEspRiesgo","Capital Reconstruccin de Jardines",'','')
							ENDIF
						ELSE
							*- No tenia y contrata la garanta
							IF .aGarantia(i,4) # .aGarantia(ln016000,4) * 0.03
								loError.inser_er("C00011","oEspRiesgo","Capital Reconstruccin de Jardines",'','')
							ENDIF
						ENDIF
				ENDCASE
			ENDIF
		ENDIF
	ENDFOR  && aGarantia

	*- Defensa Juridica
	IF ln013000 # 0
		IF	INLIST(.ModalProd,"0240", "0210", "0202")
			loError.inser_er("V00240","oEspRiesgo","Defensa Jurdica Contratacin No permitida",'','')
		ENDIF
	ELSE
		IF .ModalProd = "0230"
			loError.inser_er("V00240","oEspRiesgo","Defensa Jurdica la Contratacin es Obligatoria",'','')
		ENDIF
	ENDIF

	*- Sobreprima de continente
	IF loEsp.omCobContinente='S' AND ln016000=0
		loError.inser_er("V00240","oEspRiesgo","Sobreprima de Continente - No esta contratada la Cobertura",'','')
	ENDIF

	*- Sobreprima de contenido
	IF loEsp.omCobContenido='S' AND ln015000=0
		loError.inser_er("V00240","oEspRiesgo","Sobreprima de Contenido - No esta contratada la Cobertura",'','')
	ENDIF

	*!*		*- Capital de continente
	*!*		IF ln016000 # 0
	*!*			DO CASE
	*!*				CASE loUsua.TipOperacion='1'  AND loEsp.aGarantia(ln016000, 4) < 450.76 * loEsp.MetroConstruido
	*!*					loError.inser_er("V00241","oEspRiesgo","Capital de continente, inferior en relacin a los metros construdos",'','')

	*!*				CASE INLIST(loUsua.TipOperacion,'3','4')  AND TYPE('loEspC')='O'
	*!*					IF ln016000c = 0 AND loEsp.aGarantia(ln016000, 4) < 450.76 * loEsp.MetroConstruido
	*!*						loError.inser_er("V00241","oEspRiesgo","Capital de continente, inferior en relacin a los metros construdos",'','')
	*!*					ELSE
	*!*						IF loEspC.aGarantia(ln016000c, 4) # .aGarantia(ln016000, 4)  AND .aGarantia(ln016000, 4) < 450.76 * loEsp.MetroConstruido
	*!*							loError.inser_er("V00241","oEspRiesgo","Capital de continente, inferior en relacin a los metros construdos",'','')
	*!*						ENDIF
	*!*					ENDIF
	*!*			ENDCASE
	*!*		ENDIF

	*!*		IF ln016000 # 0 AND ( ln016000  )

	*!*		ENDIF
	*** ****** ** ********SET STEpep on
	*---------------------------------------*
	*- Validaciones relativas a las clausulas
	*---------------------------------------*
	*-	IF INLIST(loUsua.TipOperacion,'3','4')
	IF 	( !EMPTY(.CesionTextoCajaMadrid) OR !EMPTY(.CesionTexto) OR !EMPTY(.Beneficiario) )
		IF ASCAN(.aClausula,'112')=0
			loError.inser_er("V00241","oEspRiesgo","Clusula 112 no contratada.  Hipoteca y Cesin de Derechos",'','')
		ELSE
			*- Nada
		ENDIF
		*!*			ELSE
		*!*				IF ASCAN(.aClausula,'112') # 0
		*!*					loError.inser_er("V00241","oEspRiesgo","Clusula de Hipoteca - no puede contratarse sin Cesin de Derechos",'','')
		*!*				ELSE
		*!*					*- Nada
		*!*				ENDIF
	ENDIF

	*- Clausula de RC de antena
	IF ASCAN(.aClausula,'243')=0 AND  loEsp.omCobContinente = 'S'  AND INLIST(loEsp.ModalProd,'0230','0240')
		loError.inser_er("V00241","oEspRiesgo","Clusula 243 no contratada.  Antena de Radio Aficionado",'','')
	ENDIF

	*- Clausula de inquilino
	IF ASCAN(.aClausula,'250')=0 AND loEsp.Titularidad='2'
		loError.inser_er("V00241","oEspRiesgo","Clusula 250 no contratada.  Usuario de viviendas en rgimen de alquiler",'','')
	ENDIF

	*- Clausulas de Joyas y Alhajas
	LOCAL ;
		llErrorClausula223
	llErrorClausula223=.F.

	IF ln005155 # 0
		IF ASCAN(.aClausula,'223') = 0
			loError.inser_er("V00241","oEspRiesgo","Clusula 223 de Joyas y Alhajas en Mueble Cerrado no contratada",'','')
		ELSE
			*- Nada
		ENDIF
	ELSE
		IF ASCAN(.aClausula,'223') # 0  AND ln005154 = 0
			loError.inser_er("V00241","oEspRiesgo","Clusula 223 de Joyas y Alhajas no puede estar Contratada",'','')
			llErrorClausula223=.T.
		ENDIF
	ENDIF

	IF ln005154 # 0
		IF ASCAN(.aClausula,'223') = 0
			loError.inser_er("V00241","oEspRiesgo","Clusula 223 de Joyas en Caja Fuerte no contratada",'','')
		ELSE
			*- Nada
		ENDIF
	ELSE
		IF ASCAN(.aClausula,'223') # 0 AND ln005155 = 0
			IF !llErrorClausula223			&& para ver si ya puso este error en la validacion anterior
				loError.inser_er("V00241","oEspRiesgo","Clusula 223 de Joyas y Alhajas no puede estar Contratada",'','')
			ENDIF
		ENDIF
	ENDIF
	*- ENDIF		&& loUsua.TipOperacion,'3','4'


	*- Capital de continente < 6010.12
	LOCAL llError016000_241, llError015000_241
	llError015000_241=.F.
	llError016000_241=.F.

	IF ln016000 # 0
		DO CASE
			CASE loUsua.TipOperacion='1' AND .aGarantia(ln016000,4 ) < 6010.12  AND ASCAN(.aClausula,'224') = 0
				llError016000_241=.T.
				*loError.inser_er("V00241","oEspRiesgo","Clusula de Infraseguro no Contratada",'','')
			CASE INLIST(loUsua.TipOperacion,'3','4')  AND TYPE('loEspc') = 'O'
				IF ln016000c # 0
					IF .aGarantia(ln016000,4 ) # loEspC.aGarantia(ln016000c,4 )
						IF .aGarantia(ln016000,4 ) < 6010.12 AND ASCAN(.aClausula,'224') = 0
							*loError.inser_er("V00241","oEspRiesgo","Clusula de Infraseguro no Contratada",'','')
							llError016000_241=.T.
						ENDIF
					ELSE
						*- Nada son = que en cartera
					ENDIF
				ELSE
					IF .aGarantia(ln016000,4 ) < 6010.12  AND ASCAN(.aClausula,'224') = 0
						*loError.inser_er("V00241","oEspRiesgo","Clusula de Infraseguro no Contratada",'','')
						llError016000_241=.T.
					ENDIF
				ENDIF
		ENDCASE
	ENDIF

	IF ln015000 # 0
		DO CASE
			CASE loUsua.TipOperacion='1' AND .aGarantia(ln015000,4 ) < 6010.12  AND ASCAN(.aClausula,'224') = 0
				llError015000_241=.T.
				*loError.inser_er("V00241","oEspRiesgo","Clusula de Infraseguro no Contratada",'','')
			CASE INLIST(loUsua.TipOperacion,'3','4')  AND TYPE('loEspc') = 'O'
				IF ln015000c # 0
					IF .aGarantia(ln015000,4 ) # loEspC.aGarantia(ln015000c,4 )
						IF .aGarantia(ln015000,4 ) < 6010.12 AND ASCAN(.aClausula,'224') = 0
							*loError.inser_er("V00241","oEspRiesgo","Clusula de Infraseguro no Contratada",'','')
							llError015000_241=.T.
						ENDIF
					ELSE
						*- Nada son = que en cartera
					ENDIF
				ELSE
					IF .aGarantia(ln015000,4 ) < 6010.12  AND ASCAN(.aClausula,'224') = 0
						*loError.inser_er("V00241","oEspRiesgo","Clusula de Infraseguro no Contratada",'','')
						llError015000_241=.T.
					ENDIF
				ENDIF
		ENDCASE
	ENDIF

	IF ASCAN(.aClausula,'224') # 0 AND ln015000=0 AND ln016000=0
		loError.inser_er("V00241","oEspRiesgo","Clusula de Infraseguro no puede estar Contratada",'','')
	ENDIF

	IF llError016000_241 OR llError015000_241
		loError.inser_er("V00241","oEspRiesgo","Clusula de Infraseguro no puede estar Contratada",'','')
	ENDIF

	*----------------------*
	*- Controles Tcnicos -*
	*----------------------*

	*- Garantas de joyas en vvda secundaria
	IF loEsp.VvdaSecundaria='S' AND (ln005155#0 OR ln005154#0)
		loError.inser_er("C00021","oEspRiesgo","Garanta de Joyas no puede contratarse con Vvda. Secundaria",'','')
	ENDIF

	*- Garantas de joyas en vvda secundaria
	IF ln005155#0 AND loEsp.aGarantia(ln005155,4) > 0 AND loEsp.VvdaSecundaria='S'
		loError.inser_er("C00021","oEspRiesgo","Joyas en Mueble Cerrado y Vivienda Secundaria",'','')
	ENDIF
	IF ln005154#0 AND loEsp.aGarantia(ln005154,4) > 0 AND loEsp.VvdaSecundaria='S'
		loError.inser_er("C00021","oEspRiesgo","Joyas en Caja Fuerte y Vivienda Secundaria",'','')
	ENDIF


	*- Vvda Unifamiliar - con Puerta Blindada
	IF loEsp.VvdaUnifamiliar='S' AND loEsp.PuertaBlindada='S'
		loError.inser_er("V00240","oEspRiesgo","Vivienda Unifamiliar y Puerta Blindada ",'','')
	ENDIF

	*- Piso Bajo con Puerta Blindada
	IF loEsp.Piso='S'  AND loEsp.PuertaBlindada='S'
		loError.inser_er("V00240","oEspRiesgo","Piso Bajo y Puerta Blindada",'','')
	ENDIF


	*- Joyas en Caja Fuerte
	IF ln005154 > 0	 AND ln005155 = 0
		IF ln005154c > 0
			IF .aGarantia(ln005154,4) # loEspC.aGarantia(ln005154c,4)
				IF .aGarantia(ln005154,4) > 30050.60
					loError.inser_er("C00021","oEspRiesgo","Capital Joyas en Caja Fuerte supera 30050.60 ",'','')
				ELSE
					IF .aGarantia(ln005154,4) + IIF( ln005155 # 0, .aGarantia(ln005155,4) , 0 )  >  30050.60
						loError.inser_er("C00021","oEspRiesgo","Capital Joyas en Caja Fuerte + Joyas en Mueble cerrado supera 30050.60 ",'','')
					ELSE
						*- Nada, la suma no es mayor
					ENDIF

				ENDIF
			ELSE
				*- Nada, ya venia en cartera
			ENDIF
		ELSE
			*- NO tenia la Garantia, entonces la contrato
			IF .aGarantia(ln005154,4) > 30050.60
				loError.inser_er("C00021","oEspRiesgo","Capital Joyas en Caja Fuerte supera 30050.60",'','')
			ENDIF
		ENDIF
	ELSE
		*- NO Contrato la garantia
	ENDIF

	*- Joyas en Mueble Cerrado
	IF ln005155 > 0 AND ln005154 = 0
		IF ln005155c > 0
			IF .aGarantia(ln005155,4) # loEspC.aGarantia(ln005155c,4)
				IF .aGarantia(ln005155,4) > 30050.60
					loError.inser_er("C00021","oEspRiesgo","Capital Joyas en Mueble Cerrado supera 30050.60 ",'','')
				ELSE
					IF .aGarantia(ln005155,4) + IIF( ln005154 # 0, .aGarantia(ln005154,4) , 0 )  >  30050.60
						loError.inser_er("C00021","oEspRiesgo","Capital Joyas en Mueble Cerrado + Caja Fuerte supera 30050.60 ",'','')
					ELSE
						*- Nada, la suma no es mayor
					ENDIF
				ENDIF
			ELSE
				*- Nada, ya venia en cartera
			ENDIF
		ELSE
			*- NO tenia la Garantia, entonces la contrato
			IF .aGarantia(ln005155,4) > 30050.60
				loError.inser_er("C00021","oEspRiesgo","Capital Joyas en Mueble Cerrado supera 30050.60 ",'','')
			ENDIF
		ENDIF
	ELSE
		*- No Contrato la garanta
	ENDIF

	*- Suma de los Capitales de Joyas
	IF ln005155 > 0 AND ln005154 > 0
		IF ln005154c > 0  AND ln005155c > 0
			IF  .aGarantia(ln005154,4)+.aGarantia(ln005155,4) # .aGarantia(ln005154c,4)+.aGarantia(ln005155c,4) AND .aGarantia(ln005154,4)+.aGarantia(ln005155,4) > 30050.60
				loError.inser_er("C00011","oEspRiesgo","Suma de Capitales de Joyas supera 30050.60 ",'','')
			ENDIF
		ELSE
			IF .aGarantia(ln005154,4)+.aGarantia(ln005155,4) > 30050.60
				loError.inser_er("C00011","oEspRiesgo","Suma de Capitales de Joyas supera 30050.60 ",'','')
			ENDIF
		ENDIF
	ENDIF

	*- Viv. NO slida construccion
	DO CASE
		CASE loUsua.TipOperacion='1'
			IF .VvdaSolida='N'
				loError.inser_er("C00011","oEspRiesgo","Vivienda NO solida Construccin",'','')
			ENDIF
		CASE INLIST(loUsua.TipOperacion,'3','4') AND TYPE('loEspC')='O' AND .VvdaSolida # loEspC.VvdaSolida
			loError.inser_er("C00011","oEspRiesgo","Vivienda NO solida Construccin",'','')
	ENDCASE


	*- Ao Construccion
	DO CASE
		CASE loUsua.TipOperacion='1'
			IF .AoConstruccion < 1900
				loError.inser_er("C00011","oEspRiesgo","Ao de Construccin",'','')
			ENDIF
		CASE INLIST(loUsua.TipOperacion,'3','4') AND TYPE('loEspC')='O'
			IF !EMPTY(.AoConstruccion) AND .AoConstruccion < 1900  AND .AoConstruccion # loEspC.AoConstruccion
				loError.inser_er("C00011","oEspRiesgo","Ao de Construccin",'','')
			ENDIF
	ENDCASE


	*- Capital de Reaseguro
	IF loEsp.capireas > 1803036.31
		loError.inser_er("C00021","oEspRiesgo","Capital de Reaseguro superior a 1803036.31",'','')
	ENDIF


	*- Continente + Contenido + Joyas en caja fuerte + Joyas en Mueble Cerrado deber ser menor  que 480809.68 para no dar control
	LOCAL ;
		lnSumaNueva, lnSumaCartera

	STORE 0 TO lnSumaNueva, lnSumaCartera

	lnSumaNueva  	= IIF(ln016000  # 0, .aGarantia(ln016000,4)  , 0 ) + IIF(ln015000  # 0, .aGarantia(ln015000,4)  , 0 ) + IIF(ln005154  # 0, .aGarantia(ln005154,4)  , 0 ) + IIF(ln005155  # 0, .aGarantia(ln005155,4)  , 0 )
	lnSumaCartera  	= IIF(ln016000c # 0, loEspC.aGarantia(ln016000c,4) , 0 ) + IIF(ln015000c # 0, loEspC.aGarantia(ln015000c,4) , 0 ) + IIF(ln005154c # 0, loEspC.aGarantia(ln005154c,4) , 0 ) + IIF(ln005155c # 0, loEspC.aGarantia(ln005155c,4) , 0 )

	IF lnSumaNueva > 480809.68  AND lnSumaNueva # lnSumaCartera
		loError.inser_er("C00011","oEspRiesgo","Suma de Capitales superior a 480809.68 ",'','')
	ENDIF


	*- Tenga Cesion de derecho y :
	*- 1) Disminuya el capital de continente;
	*- 2) Cambie el codigo postal de la situacion del riesgo
	*- 3) Cuando cambie el Tomador del Seguro (Nombre o Apellido o Documento)
	IF !EMPTY(.CesionTextoCajaMadrid) OR !EMPTY(.CesionTexto) OR !EMPTY(.Beneficiario)
		*- Capital de continente
		IF !EMPTY(ln016000)
			IF !EMPTY(ln016000c)
				IF .aGarantia(ln016000,4) < .aGarantia(ln016000c,4)
					loError.inser_er("C00011","oEspRiesgo","Capital de Continente fue disminuido",'','')
				ENDIF
			ELSE
				*- Nada no tenia la garantia contratada en la pol original y acaba de contratarla
			ENDIF
		ELSE
			loError.inser_er("V00241","oEspRiesgo","Cesion de derecho - No se puede seleccionar sin Capital de continente",'','')
		ENDIF

		*!*			IF TYPE('toContenedorC')='O'
		*!*				IF toContenedor.OSITRIES.CODPOSTH # toContenedorC.OSITRIES.CODPOSTH
		*!*					loError.inser_er("C00011","oEspRiesgo","Cdigo Postal situacin del Riesgo",'','')
		*!*				ENDIF

		*!*				IF 		( toContenedor.otomador.apel1 # toContenedorC.otomador.apel1 );
		*!*						OR 	( toContenedor.otomador.apel2 # toContenedorC.otomador.apel2 );
		*!*						OR 	( toContenedor.otomador.nombre # toContenedorC.otomador.nombre );
		*!*						OR  ( toContenedor.otomador.NUMDOC # toContenedorC.otomador.NUMDOC )

		*!*					loError.inser_er("C00011","oEspRiesgo","Datos del tomador",'','')
		*!*				ENDIF
		*!*			ENDIF
	ENDIF
ENDWITH






ENDPROC
PROCEDURE v00073z00met001
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC
* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos


LOCAL;
	loEsp, loUsua, loError, loEspC

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError


*- Especifico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF

LOCAL ARRAY G_a_V (1,3)

WITH loEsp
	*- Tratamiento de Contenido 015000
	LOCAL ;
		ln010000, ln015000, ln016000, ln012000, ln014000, ln015xxx, ln016xxx, ln018019, lnMax015000, lnMax016000

	STORE 0 TO ln010000, ln015000, ln016000, ln012000, ln014000, ln015xxx, ln016xxx, ln018019, lnMax015000, lnMax016000

	*- No tiene ninguna garantia
	IF ALEN(.aGarantia,1) = 1 AND .aGarantia(1,4)=0 AND .aGarantia(1,6)=0
		loError.inser_er("V00240","oEspRiesgo","Garantas no Contratadas",'','')
	ENDIF

	FOR i = 1 TO ALEN(.aGarantia,1)

		*-Asistencia al Hogar
		IF .aGarantia(i,1)='012000' AND (.aGarantia(i,4) # 0 OR .aGarantia(i,6) = 0 )
			loError.inser_er("V00240","oEspRiesgo",.aGarantia(i,2)+"-"+"Capital / Prima de Garantia Asistencia al Hogar",'','')
		ENDIF

		*- Asistencia en Viaje
		IF .aGarantia(i,1)='014000' AND (.aGarantia(i,4) # 0 OR .aGarantia(i,6) = 0 )
			loError.inser_er("V00240","oEspRiesgo",.aGarantia(i,2)+"-"+"Capital / Prima de la Garantia Asistencia en Viaje",'','')
		ENDIF

		*- Defensa Jurdica
		IF .aGarantia(i,1)='013000' AND .aGarantia(i,6) = 0
			loError.inser_er("V00240","oEspRiesgo",.aGarantia(i,2)+"-"+"Prima de Defensa Jurdica no puede ser 0",'','')
		ENDIF

		*- Responsabilidad Civil
		IF .aGarantia(i,1)='010000' AND (.aGarantia(i,4) = 0  OR .aGarantia(i,6) = 0  )
			loError.inser_er("V00240","oEspRiesgo",.aGarantia(i,2)+"-"+"Capital / Prima de la Garantia Responsabilidad Civil",'','')
		ENDIF

		*- Decesos
		IF .aGarantia(i,1)='017000' AND (.aGarantia(i,4) = 0  OR .aGarantia(i,6) = 0  )
			loError.inser_er("V00240","oEspRiesgo",.aGarantia(i,2)+"-"+"Capital / Prima de Decesos",'','')
		ENDIF


		*- Consorcio
		IF .aGarantia(i,1)='018019'
			ln018019 = i
		ENDIF

		*- Asistencia en vaje
		IF .aGarantia(i,1)='014000'
			ln014000 = i
		ENDIF

		*- Contenido
		IF .aGarantia(i,1)='015000'
			ln015000 = i
		ENDIF

		IF SUBSTR(.aGarantia(i,1),1,3)='015' AND SUBSTR(.aGarantia(i,1),4,3)#'000'
			ln015xxx = i
		ENDIF

		*- RC
		IF .aGarantia(i,1)='010000'
			ln010000 = i
		ENDIF

		*- Continente
		IF .aGarantia(i,1)='016000'
			ln016000 = i
		ENDIF

		IF SUBSTR(.aGarantia(i,1),1,3)='016' AND SUBSTR(.aGarantia(i,1),4,3)#'000'
			ln016xxx = i
		ENDIF


		*- Maximo Capital de Contenido
		IF SUBSTR(.aGarantia(i,1),1,3)='015'  AND .aGarantia(i,4) > lnMax015000
			lnMax015000 = .aGarantia(i,4)
		ENDIF

		*- Maximo Capital de Continente
		IF SUBSTR(.aGarantia(i,1),1,3)='016'  AND .aGarantia(i,4) > lnMax016000
			lnMax016000 = .aGarantia(i,4)
		ENDIF

		IF  .aGarantia(i,1) = '015000' AND .aGarantia(i,4) # 0 AND .aGarantia(i,6) # 0
			loError.inser_er("V00240","oEspRiesgo",.aGarantia(i,2)+"-"+"El Capital y Prima de la Garantia Contenido debe ser 0",'','')
		ENDIF

		*!*			IF SUBSTR(.aGarantia(i,1),1,3)='015' AND .aGarantia(i,10)#'C' AND !INLIST(SUBSTR(.aGarantia(i,1), 3, 4) ,'004','005')  AND .aGarantia(i,4) = 0 AND .aGarantia(i,6) = 0
		*!*				loError.inser_er("V00240","oEspRiesgo",.aGarantia(i,2)+"-"+"Valores de la Garanta",'','')
		*!*			ENDIF

		IF .aGarantia(i,1) = '016000' AND .aGarantia(i,4) # 0 AND .aGarantia(i,6) # 0
			loError.inser_er("V00240","oEspRiesgo",.aGarantia(i,2)+"-"+"Valores de las Garantas de Continente",'','')
		ENDIF

		IF SUBSTR(.aGarantia(i,1),1,3)='016' AND .aGarantia(i,10)#'C' AND .aGarantia(i,4) = 0 AND .aGarantia(i,6) = 0
			loError.inser_er("V00240","oEspRiesgo",.aGarantia(i,2)+"-"+"Valores de la Garanta",'','')
		ENDIF
	ENDFOR
	*- Verifico si todos los capitales son iguales 015000
	SELECT DISTINCT capital ;
		FROM curGarantia ;
		WHERE 		SUBSTR(ra_cover,1,3)='015';
		AND ra_cobGar #'C';
		AND SUBSTR(ra_cover,4,3) NOT IN ('004','005','006') ;
		INTO CURSOR aux

	IF _TALLY > 1
		loError.inser_er("V00240","oEspRiesgo","Capitales de Contenido deben ser Iguales",'','')
	ELSE
		IF _TALLY # 0 AND  ln015000 # 0
			.aGarantia(ln015000,4)=aux.capital
		ENDIF
	ENDIF
	USE

	*- Verifico si todos los capitales son iguales 016000
	SELECT DISTINCT capital ;
		FROM curGarantia ;
		WHERE 		SUBSTR(ra_cover,1,3)='016';
		AND ra_cobGar #'C';
		AND SUBSTR(ra_cover,4,3) NOT IN ('006') ;
		INTO CURSOR aux

	IF _TALLY > 1
		loError.inser_er("V00240","oEspRiesgo","Capitales de Continente deben ser Iguales",'','')
	ELSE
		IF _TALLY # 0 AND  ln016000 # 0
			.aGarantia(ln016000,4)=aux.capital
		ENDIF
	ENDIF
	USE
	*- Solo contrato la oficial Continente
	IF ln016000#0 AND ln016xxx=0
		loError.inser_er("V00240","oEspRiesgo","Continente no Contratadas",'','')
	ENDIF

	*- No contrato la Oficial Continente
	IF ln016000=0 AND ln016xxx#0
		loError.inser_er("V00240","oEspRiesgo","Continente no Contratada",'','')
	ENDIF

	*- Solo contrato la oficial Contenido
	IF ln015000#0 AND ln015xxx=0
		loError.inser_er("V00240","oEspRiesgo","Contenido no Contratadas",'','')
	ENDIF
	*- No contrato la Oficial Contenido
	IF ln015000=0 AND ln015xxx#0
		loError.inser_er("V00240","oEspRiesgo","Garantia Oficial de Contenido no Contratada",'','')
	ENDIF


	*- Consorcio
	IF ln018019 = 0
		IF (ln015000#0 OR ln016000#0)
			loError.inser_er("V00240","oEspRiesgo","Consorcio no Contratada",'','')
		ENDIF
	ELSE
		IF (ln015000=0 AND ln016000=0)
			loError.inser_er("V00240","oEspRiesgo","Consorcio no puede Contratarse sin Continente o Contenido",'','')
		ELSE
			IF .aGarantia(ln018019,4) # 0 OR .aGarantia(ln018019,6)=0
				loError.inser_er("V00240","oEspRiesgo","Consorcio - Capital > 0 o Prima = 0.  El capital se calcula internamente",'','')
			ENDIF
		ENDIF
	ENDIF

	*- Tipo de consorcio 1=Standard, 2=Especial
	IF .Consorcio # '1'
		loError.inser_er("V00240","oEspRiesgo","Tipo de Consorcio",'','')
	ENDIF

	*- Capital de Reaseguro

	LOCAL;
		lnCapitalReaseguro
	lnCapitalReaseguro = 0
	lnCapitalReaseguro = IIF(ln016000#0, .aGarantia(ln016000,4),0)  + IIF(ln015000#0, .aGarantia(ln015000,4),0) + IIF(ln010000#0, .aGarantia(ln010000,4),0)

	IF VAL(oUsua.NivUsua) < 9
		.CapiReas  = lnCapitalReaseguro
	ELSE
		IF .CapiReas > lnCapitalReaseguro
			IF loUsua.TipOperacion='1'
				loError.inser_er("C00021","oEspRiesgo","Capital de Reaseguro",'','')
			ELSE
				*- Suplemento
				IF .CapiReas # loEspC.CapiReas  and TYPE(loEspC)='O'
					loError.inser_er("C00021","oEspRiesgo","Capital de Reaseguro",'','')
				ENDIF
			ENDIF
		ELSE
			.CapiReas  = lnCapitalReaseguro
		ENDIF
	ENDIF

	*- Observaciones Relativas al Contrato
	IF !EMPTY(ALLTRIM(.observ))
		IF loUsua.TipOperacion='1'
			loError.inser_er("C00011","oEspRiesgo","Observaciones Relativas al Contrato",'','')
		ELSE
			IF .observ # loEspC.observ and TYPE(loEspC)='O'
				loError.inser_er("C00011","oEspRiesgo","Observaciones Relativas al Contrato",'','')
			ENDIF
		ENDIF

		*- Nmero de clausualas
		IF ALEN(.aClausula,1) > 20
			loError.inser_er("V00240","oEspRiesgo","El nro de clausulas es > 20",'','')
		ENDIF

		*- Validacion del los datos comunes al riesgo
		THIS.val_riesgo(toContenedor)
	ENDIF
ENDWITH










ENDPROC
PROCEDURE v00932z00met001
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC
* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos

LOCAL loDbmdv002, lcCodOficial, lnIdOficial, llAlgunVacio, loEsp, loUsua

loEsp=toContenedor.oApEsp
loUsua=toContenedor.oUsua

llAlgunVacio = .F.
lnIdOficial = 0

loDbmdv002= CREATEOBJECT('emdw0002')

*- Recupero la Garantia Oficial
lcCodOficial = loDbmdv002.RecuperarGarantiaOficial(loUsua.Ramo, loEsp.Modalidad)

FOR i=1 TO ALEN(loEsp.aGarantia,1)
	*- Verifica que las garantias no esten con capital = 0 y prima = 0
	IF EMPTY(loEsp.aGarantia(i,4)) AND EMPTY(loEsp.aGarantia(i,6) )
		llAlgunVacio = .T.
	ENDIF

	*- Recupera la oficial
	IF loEsp.aGarantia(i,1) = lcCodOficial
		lnIdOficial = i
	ENDIF
ENDFOR

IF lnIdOficial = 0
	*- No contrato la oficial
	toContenedor.oError.inser_er("V00240","oEspRiesgo","Falta contratar la Cobertura Oficial",'','')
ELSE
	IF loEsp.aGarantia(lnIdOficial,4) = 0
		toContenedor.oError.inser_er("V00240","oEspRiesgo","Falta Capital en la Cobertura Oficial",'','')
	ENDIF
	IF loEsp.aGarantia(lnIdOficial,6) = 0
		toContenedor.oError.inser_er("V00240","oEspRiesgo","Falta Prima en la Cobertura Oficial",'','')
	ENDIF
ENDIF

IF llAlgunVacio
	toContenedor.oError.inser_er("V00240","oEspRiesgo","Valores de Capital y Primas nulos, en las Garantas",'','')
ENDIF


*- Validacion del los datos comunes al riesgo
THIS.val_riesgo(toContenedor)

RETU

ENDPROC
PROCEDURE val_modelocondicionesgenerales
LPARAMETERS tcModcgral
*- Modelo de Condiciones Generales
IF EMPTY(ALLTRIM(tcModcgral))
	return "V00241"
else
	return "0"	
ENDIF

ENDPROC
PROCEDURE val_datocobro
LPARAMETERS tcGuidCnt

LOCAL loContenedor

loContenedor = &tcGuidCnt



*- Forzar el destino documento a Oficina -F o Cliente -C
IF loContenedor.oaprecibo.formacob="03" AND loContenedor.oaprecibo.tipoges=9800
	loContenedor.oUsua.destdocum=loContenedor.oUsua.destdocum
ELSE
	loContenedor.oUsua.destdocum="F"
ENDIF

IF loContenedor.oaprecibo.formacob="04"
	tcRet=loContenedor.oBusRecibo.vincidencia(loContenedor.obanco.comencob)
	IF tcRet#"0"
		loContenedor.oError.inser_er(tcRet,".obanco.comencob","Comentario de Cobro","","")
	ENDIF
ENDIF

IF loContenedor.oaprecibo.formacob="06"
	tcRet=loContenedor.oBusRecibo.vtarjeta(loContenedor.obanco.tarjeta)
	IF tcRet#"0"
		loContenedor.oError.inser_er(tcRet,".obanco.tarjeta","N de Tarjeta Crdito","","")
	ENDIF
ENDIF

IF loContenedor.oaprecibo.formacob="03"
	*_ Validacin datos cobro y otros datos tomador
	Val_DatCobro(loContenedor.obanco,loContenedor.oError)
ENDIF

ENDPROC
PROCEDURE val_riesgo
lparameters toContenedor, toContenedorC

*- Validacin datos comunes del riesgo
lnRet = Val_riesgo(toContenedor.oUsua.ramo , toContenedor.oRiesgo , toContenedor.oUsua.TipOperacion, iif(type('toContenedorC')='O',toContenedorC.oRiesgo,'') , toContenedor.oError, toContenedor.oUsua.proceso)


*!*ANTES  --- > vret=Val_riesgo(Wramo,oriesgo,Wtipopera,vantreval,oerror)
*!*AHORA  --- > vret=Val_riesgo(Wramo,oriesgo,Wtipopera,oriesgoC,oerror)


ENDPROC
PROCEDURE v00934z00met001
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC

* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos

*- Validacion del los datos comunes al riesgo
THIS.val_riesgo(toContenedor)

RETU

ENDPROC
PROCEDURE pasarprimas001caja
LPARAMETERS toEsp

LOCAL ;
	lnId015001, lnId016001, lnPrima015001, lnPrima016001


toEsp.CrearCursorGarantia()
toEsp.CrearCursorGarantiaTodas()

STORE 0 TO lnPrima015001, lnPrima016001

SELECT RECNO() FROM curGarantiaTodas WHERE ra_cover='015001' INTO ARRAY laTemp
lnId015001 = IIF (_TALLY>0, laTemp(1,1) , 0)

SELECT RECNO() FROM curGarantiaTodas WHERE ra_cover='016001' INTO ARRAY laTemp
lnId016001 = IIF (_TALLY>0, laTemp(1,1) , 0)

IF lnId015001 # 0
	*- Sumo las primas 015
	SELECT SUM(PRIMA) FROM curGarantiaTodas ;
		WHERE 		SUBSTR(ra_cover,1,3)='015';
		AND	SUBSTR(ra_cover,4,3)='000';
		INTO ARRAY laTemp
	lnPrima015001=	IIF (_TALLY>0, laTemp(1,1) , 0)
	
	*- Asigno la prima
	toEsp.aGarantiaTodas(lnId015001,6) = lnPrima015001
ENDIF


IF lnId016001 # 0
	*- Sumo las primas 016
	SELECT SUM(PRIMA) FROM curGarantiaTodas ;
		WHERE 		SUBSTR(ra_cover,1,3)='016';
		AND	SUBSTR(ra_cover,4,3)='000';
		INTO ARRAY laTemp
	lnPrima016001=	IIF (_TALLY>0, laTemp(1,1) , 0)
	
	*- Asigno la prima
	toEsp.aGarantiaTodas(lnId016001,6) = lnPrima016001
ENDIF
sele curGarantia
use

sele curGarantiaTodas
use
ENDPROC
PROCEDURE crearcursor
LPARAMETERS toEsp, tnCursor
*-1=Garantias
*-2=GarantiasTodas

IF tnCursor=1
	toEsp.CrearCursorGarantia()
ELSE
	toEsp.CrearCursorGarantiaTodas()
ENDIF

ENDPROC
PROCEDURE habilitarconsorcio
LPARAMETERS toEsp

DO CASE
	CASE inlist(toEsp.TratEspecial,'001','026','009')
		RETU .F.
	OTHERWISE
		RETU .T.
ENDCASE

ENDPROC
PROCEDURE calcularprima
LPARAMETERS tnPrima, tcTipoTarifa, tcTipOperacion, tnDescFijo

*- tcTipoTarifa - Indica el valor que tiene el combo de suplemento. 
*- En Pliza: 	'S'=P.Tarifa, 
*-				'N'=Tasa. 
*- En Suplemento: 	'S'=Tarifa, 
*-					'N'=Tasa

LOCAL;
	lnPrimaNew

lnPrimaNew = tnPrima

DO CASE
	*------------------
	*- Nueva Produccion
	*------------------
	CASE tcTipOperacion='1'  AND tcTipoTarifa='S' AND tnDescFijo > 0
		*- Tarifa
		lnPrimaNew = tnPrima - (tnPrima * tnDescFijo / 100)

	CASE tcTipOperacion='1'  AND tcTipoTarifa='N' 
		*- Tasa
	
	*-------------
	*- Suplementos 
	*-------------
	*- Tarifa
	CASE inlist(tcTipOperacion,'3','4')  AND tcTipoTarifa='S' AND tnDescFijo > 0
		lnPrimaNew = tnPrima  - (tnPrima * tnDescFijo / 100)
		
	CASE inlist(tcTipOperacion,'3','4')  AND tcTipoTarifa='N' 
		*-	Nada
	
ENDCASE

retu lnPrimaNew
ENDPROC
PROCEDURE calcularprimaconsorcio
lparameters toEsp
local array aTemp(1,1)
local;
	lnTotalCapital, lnId018019, lnId018020, lnId016000, lnId015000, lnId005154, lnId158000, lnId005155, lnId023000 
	
store 0 to lnTotalCapital, lnId018019, lnId018020, lnId016000, lnId015000, lnId005154, lnId158000, lnId005155, lnId023000 

for i=1 to alen(toEsp.aGarantiaTodas,1)

	* Sumo el total de los capitales
	if inlist(toEsp.aGarantiaTodas(i,1) , '016000','015000' , '005154' , '158000' , '005155')
		lnTotalCapital = lnTotalCapital + toEsp.aGarantiaTodas(i,4)
	endif

	if toEsp.aGarantiaTodas(i,1) = '018019'
		lnId018019 = i
	endif
	if toEsp.aGarantiaTodas(i,1) = '018020'
		lnId018020 = i
	endif	
	if toEsp.aGarantiaTodas(i,1) = '016000'
		lnId016000 = i
	endif	
	if toEsp.aGarantiaTodas(i,1) = '015000'
		lnId015000 = i
	endif	
	if toEsp.aGarantiaTodas(i,1) = '005154'
		lnId005154 = i
	endif	
	if toEsp.aGarantiaTodas(i,1) = '158000'
		lnId158000 = i
	endif	
	if toEsp.aGarantiaTodas(i,1) = '005155'
		lnId005155 = i
	endif	
	if toEsp.aGarantiaTodas(i,1) = '023000'
		lnId023000 = i
	endif			
endfor

		
toEsp.aGarantiaTodas( lnId018019, 4) = lnTotalCapital 

IF toEsp.Vvda1Riesgo  = 2 && no tiene
	toEsp.aGarantiaTodas( lnId018019 , 6) = iif( lnId018019 # 0 , toEsp.aGarantiaTodas( lnId018019 , 4) , 0)  * 0.00009
ELSE
	toEsp.aGarantiaTodas( lnId018019 , 6) = 	iif( lnId016000 # 0 , toEsp.aGarantiaTodas( lnId016000 , 4) , 0) * 0.00036 ;
											+ ( iif( lnId015000 # 0 , toEsp.aGarantiaTodas( lnId015000 , 4) , 0) ;
											+   iif( lnId005154 # 0 , toEsp.aGarantiaTodas( lnId005154 , 4) , 0) ;
											+   iif( lnId158000 # 0 , toEsp.aGarantiaTodas( lnId158000 , 4) , 0) ;
											+   iif( lnId005155 # 0 , toEsp.aGarantiaTodas( lnId005155 , 4) , 0)) * 0.0009
ENDIF

if lnId018020 # 0
	toEsp.aGarantiaTodas( lnId018020 , 4) = iif( lnId023000 # 0 , toEsp.aGarantiaTodas( lnId023000 , 4) , 0)
	toEsp.aGarantiaTodas( lnId018020 , 6) = iif( lnId018020 # 0 , toEsp.aGarantiaTodas( lnId018020 , 4) , 0) * 0.0000096
endif
ENDPROC
PROCEDURE calcularcapitalreaseguro
LPARAMETERS toEsp
LOCAL ;
	lcMetodo, loDbMdv001

lcMetodo=''

*- Calcla el capital de ReAseguro
toEsp.CrearCursorGarantiaTodas()
DO CASE
		*- 052 Acc. Renta Caja
	CASE toEsp.TratEspecial=='026'
		this._026_calcular_creaseguro(.oApEsp, .oUsua.TipOperacion, .oSitRies.codposth, .oRiesgo.TariTasa)
		
		*- 073 Finisterre
	CASE toEsp.TratEspecial=='002'
		SELECT MAX(capital) AS capital ;
			FROM curGarantiaTodas ;
			WHERE 		SUBSTR(ra_cover,1,3)='015' ;
			AND SUBSTR(ra_cover,4,3)#'000' INTO CURSOR c015

		SELECT MAX(capital) AS capital ;
			FROM curGarantiaTodas ;
			WHERE 		SUBSTR(ra_cover,1,3)='016' ;
			AND SUBSTR(ra_cover,4,3)#'000' INTO CURSOR c016

		SELECT capital ;
			FROM curGarantiaTodas ;
			WHERE 		ra_cover='010000' INTO CURSOR c010

		toEsp.Capireas = (c015.capital + c016.capital + c010.capital)


	CASE toEsp.TratEspecial=='012'	&& 076 comunidades finisterre
		LOCAL ;
			lnCap016, lnCap010, lnCap023

		STORE 0 TO lnCap016, lnCap010, lnCap023

		FOR i=1 TO ALEN(toEsp.aGarantiaTodas,1)
			IF toEsp.aGarantiaTodas(i,4)#0 AND INLIST(toEsp.aGarantiaTodas(i,1),'016001','016002','016003','016004')
				lnCap016=toEsp.aGarantiaTodas(i,4)
			ENDIF
			IF toEsp.aGarantiaTodas(i,4)#0 AND INLIST(toEsp.aGarantiaTodas(i,1),'010000')
				lnCap010=toEsp.aGarantiaTodas(i,4)
			ENDIF
			IF toEsp.aGarantiaTodas(i,4)#0 AND INLIST(toEsp.aGarantiaTodas(i,1),'023000')
				lnCap023=toEsp.aGarantiaTodas(i,4)
			ENDIF
		ENDFOR

		toEsp.Capireas = lnCap016 + lnCap010 + lnCap023

		*- 073 Caja Madrid
	CASE toEsp.TratEspecial=='001'
		SELECT SUM(capital) ;
			FROM curGarantiaTodas ;
			WHERE ra_cover IN('016000','015000' , '005154' , '158000' , '005155');
			INTO ARRAY aTemp

		toEsp.Capireas = 150253.03 + aTemp(1,1)

	CASE toEsp.TratEspecial=='016'	&& Incendio HIPOTECARIO
		SELECT SUM(capital) ;
			FROM curGarantiaTodas ;
			WHERE ra_cover IN('016001');
			INTO ARRAY aTemp

		toEsp.Capireas = 	aTemp(1,1)


	CASE toEsp.TratEspecial=='013'	&& MULTIRIESGO COMERCIOS
		SELECT SUM(capital) ;
			FROM curGarantiaTodas ;
			WHERE ra_cover IN('016000','015000' , '010000' , '031000');
			INTO ARRAY aTemp

		toEsp.Capireas = 	aTemp(1,1)

	CASE toEsp.TratEspecial=='017'	&& mapfre Decesos
		SELECT SUM(capital) ;
			FROM curGarantiaTodas ;
			INTO ARRAY aTemp

		toEsp.Capireas = 	aTemp(1,1)

	CASE toEsp.TratEspecial=='009'	&& Cosechas Agropecuaria
		THIS._009_calcular_capital_reaseguro(.oApEsp, .oUsua.TipOperacion, .oSitRies.codposth, .oRiesgo.TariTasa)

	OTHERWISE
		*- Verifica que mtodo utiliza
		*- Recuperar el metodo de calculo del capital de reaseguro
		loDbMdv001=CREATEOBJECT('emdw0001')
		lcMetodo = loDbMdv001.RecuperarMetodoCapReaseguro(toEsp.TratEspecial)

		*- Llama al mtodo de validacin
		IF !EMPTY(ALLTRIM(lcMetodo))
			lcMetodo = 'This.' + ALLTRIM(lcMetodo) + '(toEsp)'
			&lcMetodo
		ENDIF
ENDCASE

USE IN curGarantiaTodas



ENDPROC
PROCEDURE v32073finmet001
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC
* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos



LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Especifico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF


*- Validacion del los datos comunes al riesgo
THIS.val_riesgo(toContenedor,iif(TYPE('toContenedorC')='O',toContenedorC,''))

loEsp.CrearCursorGarantia()

*- 015000
llError015000 = THIS.vCoberturasGarantias(loError,'015000','Contenido')

*- 016000
llError016000 = THIS.vCoberturasGarantias(loError,'016000','Continente')

*- 014000
SELECT ra_texto FROM curGarantia ;
	WHERE ra_cover='014000' AND (capital#0 OR PRIMA=0) ;
	INTO ARRAY aTemp

IF _TALLY=1
	loError.inser_er("V00240","oEspRiesgo",aTemp(1,1)+' - El capital debe ser 0 y la prima # 0','','')
ENDIF


*- 010000
SELECT ra_texto FROM curGarantia ;
	WHERE ra_cover='010000' AND (capital=0 OR PRIMA=0) ;
	INTO ARRAY aTemp

IF _TALLY=1
	loError.inser_er("V00240","oEspRiesgo",ra_texto +' - Capital y Prima deben ser > 0','','')
ENDIF

*-018019
SELECT ra_texto FROM curGarantia ;
	WHERE (SUBSTR(ra_cover,1,3)='015' OR SUBSTR(ra_cover,1,3)='016') AND SUBSTR(ra_cover,4,3)#'000' ;
	INTO CURSOR c015016

LOCAL ARRAY aTemp2(1,1)
SELECT RECNO() AS ln018019, ra_texto FROM curGarantia ;
	WHERE ra_cover='018019' INTO CURSOR cConsorcio


DO CASE
	CASE RECCOUNT('c015016') > 0 AND RECCOUNT('cConsorcio') = 0
		*- Falta el consorcio
		loError.inser_er("V00240","oEspRiesgo",'Consorcio debe contratarse','','')
	CASE RECCOUNT('c015016') = 0 AND RECCOUNT('cConsorcio') > 0
		*- Faltan las Garantias del 015 o 016
		loError.inser_er("V00240","oEspRiesgo",'Consorcio no puede contratarse','','')
	CASE RECCOUNT('c015016') > 0 AND RECCOUNT('cConsorcio') > 0
		IF loEsp.aGarantia(cConsorcio.ln018019,4) # 0 OR loEsp.aGarantia(cConsorcio.ln018019,6) = 0
			loError.inser_er("V00240","oEspRiesgo",'Consorcio - El capital deber ser 0 y la Prima > 0','','')
		ENDIF
ENDCASE
USE IN cConsorcio
USE IN c015016

*- Tipo de Consorcio
IF loEsp.Consorcio#'1'  && Estandard
	loError.inser_er("V00240","oEspRiesgo",'Tipo de Consorcio - debe ser Estandard ','','')
ENDIF



*- Cierro el cursor de garantas
loEsp.CerrarCursor('curGarantia')


ENDPROC
PROCEDURE tienesituacionriesgo
LPARAMETERS tcTratEspecial, tcRamo
local ;
	llRet 
	
llRet = .F.

DO CASE
	CASE inlist(tcTratEspecial,'018','002','001','016','012')	
		llRet = .T.

	CASE inlist(tcTratEspecial,'196','197','199','822')	
		llRet = .f.

	OTHERWISE
		if inlist(tcRamo,'056','057','080','052','046','956','957')
			llRet = .F.
		else 
			return .t.	
		endif	
ENDCASE
return llRet 

ENDPROC
PROCEDURE vcoberturasgarantias
lparameters toError, tcCodCober, tcTexto
*- Objeto de error
*- Codigo de la cobertura
*- Texto para el error

local ;
	llError
	
llError= .f.	

LOCAL ARRAY aTemp(1,1)
*- Valida que:
*- la cobertura tenga capital y Prima = 0
*- que tenga la cobertura y al menos una garantia

aTemp=''

tcTexto=ALLTRIM(tcTexto)

SELECT RA_COVER, Capital, PRIMA, alltrim(ra_texto) FROM curGarantia WHERE ra_cover = tcCodCober ;
	UNION ;
	SELECT RA_COVER, Capital, PRIMA, alltrim(ra_texto) FROM curGarantia  WHERE SUBSTR(RA_COVER,1,3)=SUBSTR(tcCodCober,1,3) AND SUBSTR(RA_COVER,4,3) # '000'  ;
	INTO ARRAY aTemp

IF _TALLY = 0
	return llError
ENDIF

IF _TALLY = 1
	IF aTemp(1,1) # tcCodCober
		*- Solo tiene Garantia/s
		toError.inser_er("V00240","oEspRiesgo","Cobertura - no seleccionada",'','')
		llError=.t.
	ELSE
		*- Solo Tiene Coberturas
		toError.inser_er("V00240","oEspRiesgo",tcTexto+ " - Garantas no seleccionadas",'','')
		llError=.t.
	ENDIF
	return llError
ELSE
	IF aTemp(1,1) # tcCodCober
		*- Solo tiene Garantia/s
		toError.inser_er("V00240","oEspRiesgo","Cobertura - no seleccionada",'','')
		llError=.t.
		return llError
	ENDIF
ENDIF

FOR i=1 to ALEN(aTemp,1)

	*- Valida q capital y prima sean 0 en la cobertura
	if aTemp(i,1)= tcCodCober and (aTemp(i,2) # 0 or aTemp(i,3) # 0)
		toError.inser_er("V00240","oEspRiesgo",tcTexto + " - Capital y Prima deben ser 0",'','')
		llError=.t.
	endif	
	
	*- Valida que el capital y la prima de la garantia no sean 0
	if aTemp(i,1)# tcCodCober and substr(aTemp(i,1),4,3) # '000' and (aTemp(i,2) = 0 or aTemp(i,3) = 0)
		toError.inser_er("V00240","oEspRiesgo", substr( aTemp(i,4), 1 + at('.',aTemp(i,4)) , len(aTemp(i,4)) ) + " - Capital o Prima no pueden ser 0",'','')
		llError=.t.
	endif	
endfor
return llError


ENDPROC
PROCEDURE tratarordenesministeriales
LPARAMETERS toEsp
*- Tratamimento de los descuentos de ordenes ministeriales que vienen en la var temp
*- la variable temp, tendra este formato en las  iniciales
*- 'XXX;9999.999;XXX;9999.999;XXX;9999.999;'
*- El tratamiento comienza con la ultima ocurrencia, porque en teoria no llegaran nunca 3, sino que deberian llegar
*- solo dos ocurrencias, entonces sui llega 3, solo se reflejarn las ultimas 2
*- Descuentos de Tcnico Temporales	: '01','08','09','10','11','12','15','16','13','19'
*- se pasa en la propiedad oApRecibo.DescTemp, se aplica en el calculo de lso recibos
*-
*- Descuentos de Tcnico Fijos : 	'02','03','04','05','07','14','18'
*- se aplican neta por neta, antes de cargar mPrimaNue
IF !INLIST ( toEsp.TratEspecial , '001','013','014','018' )
	RETURN
ENDIF

LOCAL;
	temp
Temp = toEsp.Temp

#IF DEBUGMODE
	AAAA='XXX;9999.999;XXX;9999.999;XXX;9999.999;'+CHR(13)+toEsp.Temp
	STRTOFILE(AAAA,'DescOM.TXT')
#ENDIF

DO CASE
	*- Multiriesgo Caja Madrid 0910
	CASE toEsp.TratEspecial='018'
	
	*- Caja Madrid 0230
	CASE toEsp.TratEspecial='001'
		*- Tratamiento de la TERCERA ocurrencia
		*- 'XXX;9999.999;XXX;9999.999;XXX;9999.999;'
		*- '12345678901234567890123456789012345678
		DO CASE
			CASE INLIST ( SUBSTR(Temp,28,2) ,'01','08','09','10','11','12','15','16','13' )
				*- Descuento Primer ao = Descuento Temporal en Gescom
				toEsp.omTipoPrima1ao	='S'
				toEsp.omCod1ao		= ALLTRIM(STR(VAL(SUBSTR(Temp,28,2))))
				toEsp.omPor1ao		= VAL(SUBSTR(temp,31,8))

			CASE INLIST ( SUBSTR(Temp,28,2) ,'02','03','04','05','07','14','18','19')

				*- Descuento Resto ao = Descuento Fijo de Gescom
				toEsp.omTipoPrimaRestoao	= 'S'
				toEsp.omCodRestoAo		= ALLTRIM(STR(VAL(SUBSTR(Temp,28,2))))
				toEsp.omPorRestoao		= VAL(SUBSTR(Temp,31,8))
		ENDCASE

		*- Tratamiento de la SEGUNDA ocurrencia
		*- 'XXX;9999.999;XXX;9999.999;XXX;9999.999;'
		*- '12345678901234567890123456789012345678
		DO CASE
			CASE INLIST ( SUBSTR(Temp,15,2) ,'01','08','09','10','11','12','15','16','13' )
				*- Descuento Primer ao = Descuento Temporal en Gescom
				toEsp.omTipoPrima1ao	='S'
				toEsp.omCod1ao		= ALLTRIM(STR(VAL(SUBSTR(Temp,15,2))))
				toEsp.omPor1ao		= VAL(SUBSTR(temp,18,8))

			CASE INLIST ( SUBSTR(Temp,15,2) ,'02','03','04','05','07','14','18','19')

				*- Descuento Resto ao = Descuento Fijo de Gescom
				toEsp.omTipoPrimaRestoao	= 'S'
				toEsp.omCodRestoAo		= ALLTRIM(STR(VAL(SUBSTR(Temp,15,2))))
				toEsp.omPorRestoao		= VAL(SUBSTR(Temp,18,8))
		ENDCASE

		*- Tratamiento de la PRIMERA ocurrencia
		*- 'XXX;9999.999;XXX;9999.999;XXX;9999.999;'
		*- '12345678901234567890123456789012345678
		DO CASE
			CASE INLIST ( SUBSTR(Temp,2,2) ,'01','08','09','10','11','12','15','16','13' )
				*- Descuento Primer ao = Descuento Temporal en Gescom = Concepto de recibo
				toEsp.omTipoPrima1ao	='S'
				toEsp.omCod1ao		= ALLTRIM(STR(VAL(SUBSTR(Temp,2,2))))
				toEsp.omPor1ao		= VAL(SUBSTR(temp,5,8))

			CASE INLIST ( SUBSTR(Temp,2,2) ,'02','03','04','05','07','14','18','19')

				*- Descuento Resto ao = Descuento Fijo de Gescom = Garanta a Garanta
				toEsp.omTipoPrimaRestoao	= 'S'
				toEsp.omCodRestoAo		= ALLTRIM(STR(VAL(SUBSTR(Temp,2,2))))
				toEsp.omPorRestoao		= VAL(SUBSTR(Temp,5,8))
		ENDCASE

ENDCASE


ENDPROC
PROCEDURE habilitarordenministerial
lparameters tcTratEspecial

if inlist(tcTratEspecial,'001','013','015','018')
	retu .t.
else
	retu .f.
endif		
ENDPROC
PROCEDURE habilitarrecargosom
LPARAMETERS toEsp, tcCod
*- Verifica que este contratada la cobertura
DO CASE
	CASE tcCod='001'
		if 0 = ASCAN(toEsp.aGarantia,'016000')
			RETU .F.
		endif	

	CASE tcCod='002'
		if 0 = ASCAN(toEsp.aGarantia,'015000')
			RETU .F.
		endif	
	CASE tcCod='003'
		if 0 = ASCAN(toEsp.aGarantia,'004000')
			RETU .F.
		endif	
	CASE tcCod='004'
		if 0 = ASCAN(toEsp.aGarantia,'163000')
			RETU .F.
		endif			
ENDCASE

IF INLIST(toEsp.TratEspecial,'013','014')
	RETU .F.
ELSE
	RETU .T.
ENDIF

ENDPROC
PROCEDURE tratarsobreprima
LPARAMETERS toEsp
LOCAL lnId
lnId=0

WITH toEsp
	DO CASE
		CASE .omCodSobrePrima='001'
			*- Iniciar sobreprima para Continente
			.omCobContinente 		='S'
			.omCodsobrePrimaConti	='001'
			.omImpCobContinente		= THIS.RecuperarSobrePrima(.omCodSobrePrimaConti)

			*- Sumo la sobreprima siempre que la poliza sea vieja
			IF EMPTY( .PrimeraVezPolizaCartera )
				lnId = ASCAN(toEsp.aGarantia,'016001')
				IF lnId # 0
					lnId=ASUBSCRIPT(.aGarantia, lnId , 1)
					toEsp.aGarantia(lnId,6) = .aGarantia(lnId,6) + .omImpCobContinente
				ELSE
					*- Busco alguna otra y se la sumo
					FOR i=1 TO ALEN(toEsp.aGarantia,1)
						IF SUBSTR(toEsp.aGarantia(i,1),1,3)='016' AND SUBSTR(toEsp.aGarantia(i,1),4,3)#'000'
							toEsp.aGarantia(i,6) = .aGarantia(i,6) + .omImpCobContinente
							EXIT
						ENDIF
					ENDFOR
				ENDIF
			ENDIF

		CASE .omCodSobrePrima='002'
			*- Iniciar sobreprima para Contenido
			.omCobContenido 		='S'
			.omCodSobrePrimaConte	='002'
			.omImpCobContenido 		= THIS.RecuperarSobrePrima(.omCodSobrePrimaConte)

			*- Sumo la sobreprima siempre que la poliza sea vieja
			IF EMPTY( .PrimeraVezPolizaCartera)
				lnId = ASCAN(toEsp.aGarantia,'015001')
				IF lnId # 0
					lnId=ASUBSCRIPT(.aGarantia, lnId , 1)
					toEsp.aGarantia(lnId,6) = .aGarantia(lnId,6) + .omImpCobContinente
				ELSE
					*- Busco alguna otra y se la sumo
					FOR i=1 TO ALEN(toEsp.aGarantia,1)
						IF SUBSTR(toEsp.aGarantia(i,1),1,3)='015' AND SUBSTR(toEsp.aGarantia(i,1),4,3)#'000'
							toEsp.aGarantia(i,6) = .aGarantia(i,6) + .omImpCobContinente
							EXIT
						ENDIF
					ENDFOR
				ENDIF
			ENDIF

		CASE .omCodSobrePrima='003'
			*- Iniciar ambos
			.omCobContinente 		='S'
			.omCodsobrePrimaConti	='001'
			.omImpCobContinente		= THIS.RecuperarSobrePrima(.omCodSobrePrimaConti)

			.omCobContenido 		='S'
			.omCodSobrePrimaConte	='002'
			.omImpCobContenido 		= THIS.RecuperarSobrePrima(.omCodSobrePrimaConte)

			*- Sumo la sobreprima siempre que la poliza sea vieja
			IF EMPTY( .PrimeraVezPolizaCartera)
				lnId = ASCAN(toEsp.aGarantia,'016000')
				IF lnId # 0
					lnId=ASUBSCRIPT(.aGarantia, lnId , 1)
					toEsp.aGarantia(lnId,6) = .aGarantia(lnId,6) + .omImpCobContinente
				ELSE
					*- Busco alguna otra y se la sumo
					FOR i=1 TO ALEN(toEsp.aGarantia,1)
						IF SUBSTR(toEsp.aGarantia(i,1),1,3)='016' AND SUBSTR(toEsp.aGarantia(i,1),4,3)#'000'
							toEsp.aGarantia(i,6) = .aGarantia(i,6) + .omImpCobContinente
							EXIT
						ENDIF
					ENDFOR
				ENDIF

				lnId = ASCAN(toEsp.aGarantia,'015000')
				IF lnId # 0
					lnId=ASUBSCRIPT(.aGarantia, lnId , 1)
					toEsp.aGarantia(lnId,6) = .aGarantia(lnId,6) + .omImpCobContinente
				ELSE
					*- Busco alguna otra y se la sumo
					FOR i=1 TO ALEN(toEsp.aGarantia,1)
						IF SUBSTR(toEsp.aGarantia(i,1),1,3)='015' AND SUBSTR(toEsp.aGarantia(i,1),4,3)#'000'
							toEsp.aGarantia(i,6) = .aGarantia(i,6) + .omImpCobContinente
							EXIT
						ENDIF
					ENDFOR
				ENDIF
			ENDIF
	ENDCASE
ENDWITH


*!*	WITH toEsp
*!*		IF .omCodSobrePrimaConti='001'
*!*			*- Iniciar sobreprima para Continente
*!*			.omCobContinente 		='S'
*!*			.omImpCobContinente		= THIS.RecuperarSobrePrima(.omCodSobrePrimaConti)

*!*			*- Sumo la sobreprima siempre que la poliza sea vieja
*!*			IF EMPTY( .PrimeraVezPolizaCartera )
*!*				lnId = ASCAN(toEsp.aGarantia,'016001')
*!*				IF lnId # 0
*!*					lnId=ASUBSCRIPT(.aGarantia, lnId , 1)
*!*					toEsp.aGarantia(lnId,6) = .aGarantia(lnId,6) + .omImpCobContinente
*!*				ELSE
*!*					*- Busco alguna otra y se la sumo
*!*					FOR i=1 TO ALEN(toEsp.aGarantia,1)
*!*						IF SUBSTR(toEsp.aGarantia(i,1),1,3)='016' AND SUBSTR(toEsp.aGarantia(i,1),4,3)#'000'
*!*							toEsp.aGarantia(i,6) = .aGarantia(i,6) + .omImpCobContinente
*!*							EXIT
*!*						ENDIF
*!*					ENDFOR
*!*				ENDIF
*!*			ENDIF
*!*		ENDIF

*!*		IF .omCodSobrePrimaConte='002'
*!*			*- Iniciar sobreprima para Contenido
*!*			.omCobContenido 		='S'
*!*			.omImpCobContenido 		= THIS.RecuperarSobrePrima(.omCodSobrePrimaConte)

*!*			*- Sumo la sobreprima siempre que la poliza sea vieja
*!*			IF EMPTY( .PrimeraVezPolizaCartera)
*!*				lnId = ASCAN(toEsp.aGarantia,'015001')
*!*				IF lnId # 0
*!*					lnId=ASUBSCRIPT(.aGarantia, lnId , 1)
*!*					toEsp.aGarantia(lnId,6) = .aGarantia(lnId,6) + .omImpCobContinente
*!*				ELSE
*!*					*- Busco alguna otra y se la sumo
*!*					FOR i=1 TO ALEN(toEsp.aGarantia,1)
*!*						IF SUBSTR(toEsp.aGarantia(i,1),1,3)='015' AND SUBSTR(toEsp.aGarantia(i,1),4,3)#'000'
*!*							toEsp.aGarantia(i,6) = .aGarantia(i,6) + .omImpCobContinente
*!*							EXIT
*!*						ENDIF
*!*					ENDFOR
*!*				ENDIF
*!*			ENDIF
*!*		ENDIF
*!*	ENDWITH


*!*	WITH toEsp
*!*		DO CASE
*!*			CASE .omCodSobrePrima='001'
*!*				*- Iniciar sobreprima para Continente
*!*				.omCobContinente 		='S'
*!*				.omCodsobrePrimaConti	='001'
*!*				.omImpCobContinente		= THIS.RecuperarSobrePrima(.omCodSobrePrimaConti)

*!*				*- Sumo la sobreprima siempre que la poliza sea vieja
*!*				IF EMPTY( .PrimeraVezPolizaCartera )
*!*					lnId = ASCAN(toEsp.aGarantia,'016001')
*!*					IF lnId # 0
*!*						lnId=ASUBSCRIPT(.aGarantia, lnId , 1)
*!*						toEsp.aGarantia(lnId,6) = .aGarantia(lnId,6) + .omImpCobContinente
*!*					ELSE
*!*						*- Busco alguna otra y se la sumo
*!*						FOR i=1 TO ALEN(toEsp.aGarantia,1)
*!*							IF SUBSTR(toEsp.aGarantia(i,1),1,3)='016' AND SUBSTR(toEsp.aGarantia(i,1),4,3)#'000'
*!*								toEsp.aGarantia(i,6) = .aGarantia(i,6) + .omImpCobContinente
*!*								EXIT
*!*							ENDIF
*!*						ENDFOR
*!*					ENDIF
*!*				ENDIF

*!*			CASE .omCodSobrePrima='002'
*!*				*- Iniciar sobreprima para Contenido
*!*				.omCobContenido 		='S'
*!*				.omCodSobrePrimaConte	='002'
*!*				.omImpCobContenido 		= THIS.RecuperarSobrePrima(.omCodSobrePrimaConte)

*!*				*- Sumo la sobreprima siempre que la poliza sea vieja
*!*				IF EMPTY( .PrimeraVezPolizaCartera)
*!*					lnId = ASCAN(toEsp.aGarantia,'015001')
*!*					IF lnId # 0
*!*						lnId=ASUBSCRIPT(.aGarantia, lnId , 1)
*!*						toEsp.aGarantia(lnId,6) = .aGarantia(lnId,6) + .omImpCobContinente
*!*					ELSE
*!*						*- Busco alguna otra y se la sumo
*!*						FOR i=1 TO ALEN(toEsp.aGarantia,1)
*!*							IF SUBSTR(toEsp.aGarantia(i,1),1,3)='015' AND SUBSTR(toEsp.aGarantia(i,1),4,3)#'000'
*!*								toEsp.aGarantia(i,6) = .aGarantia(i,6) + .omImpCobContinente
*!*								EXIT
*!*							ENDIF
*!*						ENDFOR
*!*					ENDIF
*!*				ENDIF

*!*			CASE .omCodSobrePrima='003'
*!*				*- Iniciar ambos
*!*				.omCobContinente 		='S'
*!*				.omCodsobrePrimaConti	='001'
*!*				.omImpCobContinente		= THIS.RecuperarSobrePrima(.omCodSobrePrimaConti)

*!*				.omCobContenido 		='S'
*!*				.omCodSobrePrimaConte	='002'
*!*				.omImpCobContenido 		= THIS.RecuperarSobrePrima(.omCodSobrePrimaConte)

*!*				*- Sumo la sobreprima siempre que la poliza sea vieja
*!*				IF EMPTY( .PrimeraVezPolizaCartera)
*!*					lnId = ASCAN(toEsp.aGarantia,'016000')
*!*					IF lnId # 0
*!*						lnId=ASUBSCRIPT(.aGarantia, lnId , 1)
*!*						toEsp.aGarantia(lnId,6) = .aGarantia(lnId,6) + .omImpCobContinente
*!*					ELSE
*!*						*- Busco alguna otra y se la sumo
*!*						FOR i=1 TO ALEN(toEsp.aGarantia,1)
*!*							IF SUBSTR(toEsp.aGarantia(i,1),1,3)='016' AND SUBSTR(toEsp.aGarantia(i,1),4,3)#'000'
*!*								toEsp.aGarantia(i,6) = .aGarantia(i,6) + .omImpCobContinente
*!*								EXIT
*!*							ENDIF
*!*						ENDFOR
*!*					ENDIF

*!*					lnId = ASCAN(toEsp.aGarantia,'015000')
*!*					IF lnId # 0
*!*						lnId=ASUBSCRIPT(.aGarantia, lnId , 1)
*!*						toEsp.aGarantia(lnId,6) = .aGarantia(lnId,6) + .omImpCobContinente
*!*					ELSE
*!*						*- Busco alguna otra y se la sumo
*!*						FOR i=1 TO ALEN(toEsp.aGarantia,1)
*!*							IF SUBSTR(toEsp.aGarantia(i,1),1,3)='015' AND SUBSTR(toEsp.aGarantia(i,1),4,3)#'000'
*!*								toEsp.aGarantia(i,6) = .aGarantia(i,6) + .omImpCobContinente
*!*								EXIT
*!*							ENDIF
*!*						ENDFOR
*!*					ENDIF
*!*				ENDIF
*!*		ENDCASE
*!*	ENDWITH

ENDPROC
PROCEDURE recuperarsobreprima
LPARAMETERS tcCodSobreprima
LOCAL ;
	lnPrima
lnPrima=0

DO CASE
	CASE tcCodSobreprima='001'
		lnPrima = 12.02
	CASE tcCodSobreprima='002'
		lnPrima = 6.01
ENDCASE

RETURN lnPrima 
ENDPROC
PROCEDURE tratarclausulacaja
LPARAMETERS toEsp , tcAccion, tnfila

*- tcAccion ['ALTA'/'BAJA'/'MODIFICACION']
*- tnfila Opcional - numero de fila a evaluar
LOCAL;
	lcCod

lcCodGar = toEsp.aGarantia(tnfila,1)

DO CASE
	CASE toEsp.TratEspecial='001'
		DO CASE
			CASE tcAccion='ALTA'
				*- Cesion de derechos
				IF !EMPTY(toEsp.CesionTextoCajaMadrid) OR !EMPTY(toEsp.CesionTexto) OR !EMPTY(toEsp.Beneficiario)
					THIS.abmClausula(toEsp,'ALTA','30','073','CAJ','112')
				ENDIF

				*- Capital de continente y Garantas de joyas
				DO CASE
					CASE lcCodGar='016000' AND toEsp.aGarantia(tnfila,4) < 6010.12 && 
						THIS.abmClausula(toEsp,'ALTA','30','073','CAJ','224')

					CASE INLIST(lcCodGar,'005000','005154','005155')
						THIS.abmClausula(toEsp,'ALTA','30','073','CAJ','223')
				ENDCASE

			CASE tcAccion='BAJA'
				*- Cesion de derechos
				*!*			If EMPTY(toEsp.CesionTextoCajaMadrid) AND EMPTY(toEsp.CesionTexto) AND EMPTY(toEsp.Beneficiario)
				*!*				This.abmClausula(toEsp,'BAJA','30','073','CAJ','112')
				*!*			Endif

				*- Capital de continente y Garantas de joyas
				*!*			Do CASE
				*!*				Case lcCodGar='016000'
				*!*					This.abmClausula(toEsp,'BAJA','30','073','CAJ','224')

				*!*				Case inlist(lcCodGar,'005000','005154','005155')
				*!*					This.abmClausula(toEsp,'BAJA','30','073','CAJ','223')
				*!*			Endcase


			CASE tcAccion='MODIFICACION'
				*- Capital de continente y Garantas de joyas
				*!*			Do CASE
				*!*				Case lcCodGar='016000' and toEsp.aGarantia(tnfila,4) < 6010.12 && 
				*!*					This.abmClausula(toEsp,'ALTA','30','073','CAJ','224')

				*!*				Case lcCodGar='016000' and toEsp.aGarantia(tnfila,4) >= 6010.12 && 
				*!*					This.abmClausula(toEsp,'BAJA','30','073','CAJ','224')
				*!*			Endcase
		ENDCASE
ENDCASE

ENDPROC
PROCEDURE abmclausula
LPARAMETERS toEsp, tcAccion, tcEntidad, tcRamo, tcModalidad, tcCod
*- tcAccion= ALTA / BAJA
*- tcCod = Codigo de clausula

LOCAL ;
	loMdvClausulas, lnNew, lnElemento

loMdvClausulas=CREATEOBJECT('mdv_clausulas')
lnNew = 0
lnElemento = 0

DO CASE
	CASE tcAccion='ALTA'
		IF ASCAN(toEsp.aClausula,tcCod) = 0		&& no existe

			IF ALEN(toEsp.aClausula,1)=1 AND EMPTY(toEsp.aClausula(1,1)) AND EMPTY(toEsp.aClausula(1,2))  AND EMPTY(toEsp.aClausula(1,3))
				lnNew = ALEN(toEsp.aClausula,1)
			ELSE
				lnNew = ALEN(toEsp.aClausula,1) + 1
			ENDIF

			DIME toEsp.aClausula( lnNew , ALEN(toEsp.aClausula,2) )
			toEsp.aClausula(lnNew,1) = tcCod
			toEsp.aClausula(lnNew,2) = loMdvClausulas.RecuperarTexto(tcEntidad, tcRamo, tcModalidad, tcCod)
			toEsp.aClausula(lnNew,3) = tcCod
		ENDIF

	CASE tcAccion='BAJA'
		IF ALEN(toEsp.aClausula,1)=1 and ASCAN(toEsp.aClausula,tcCod) # 0 && existe
			toEsp.aClausula(1,1) = ''
			toEsp.aClausula(1,2) = ''
			toEsp.aClausula(1,3) = ''
		ELSE
			lnElemento = ASCAN(toEsp.aClausula,tcCod)
			IF lnElemento # 0		&& existe
				ADEL(toesp.aclausula,ASUBSCRIPT(toesp.aclausula,lnElemento,1),1)
				DIME toesp.aclausula(ALEN(toesp.aclausula,1)-1 , ALEN(toesp.aclausula,2))
				IF ALEN(toEsp.aClausula,1)=1
					toEsp.aClausula(1,1) = ''
					toEsp.aClausula(1,2) = ''
					toEsp.aClausula(1,3) = ''
				ENDIF
			ENDIF
		ENDIF
ENDCASE




ENDPROC
PROCEDURE inicializarprima
Lparameters toEsp, toApRecibo

toEsp.primatot 	= 0
toEsp.capireas	= 0

toApRecibo.Ini_primas()


ENDPROC
PROCEDURE vclausulacesionderecho
LPARAMETERS toEsp, toApRecibo
DO CASE
	CASE toEsp.TratEspecial='001'
		IF EMPTY(toEsp.CesionTextoCajaMadrid) AND EMPTY(toEsp.CesionTexto) AND EMPTY(toEsp.Beneficiario)
			THIS.abmClausula(toEsp,'BAJA','30','073','CAJ','112')
		ELSE
			THIS.abmClausula(toEsp,'ALTA','30','073','CAJ','112')
		ENDIF
	OTHERWISE
		*-nada por ahora
ENDCASE


ENDPROC
PROCEDURE vgeneral
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC



* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos


LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Especfico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF

loEsp.CrearCursorGarantia()

*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !EMPTY(ra_cover) ;
	INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
	RETU
ENDIF


*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !inlist(RA_COVER,'018019','018020') and !EMPTY(RA_COVER) AND (EMPTY(CAPITAL) OR  EMPTY(PRIMA)) and ra_cobGar # 'C';
	INTO CURSOR cTemp
IF _TALLY>0
	loError.inser_er("V00240","oEspRiesgo",'Garantas Contratadas, valores no vlidas','','')
	RETU
ENDIF



*- Valida que tenga consorcio si tiene alguna del 015 o 016
SELECT * FROM CurGarantia ;
	WHERE inlist(substr(RA_COVER,1,3),'015','016') ;
	INTO CURSOR cTemp
IF _TALLY>0
	SELECT * FROM CurGarantia ;
		WHERE inlist(RA_COVER,'018019','018020') ;
		INTO CURSOR cTemp
	if 	_TALLY=0
		loError.inser_er("V00240","oEspRiesgo",'Consorcio, Garanta no contratada','','')
	endif
ENDIF



*!*	*- 015000
*!*	llError015000 = THIS.vCoberturasGarantias(loError,'015000','Contenido')

*!*	IF llError015000
*!*		loError.inser_er("V00240","oEspRiesgo",'Garantas de Contenido','','')
*!*	endif

*!*	*- 016000
*!*	llError016000 = THIS.vCoberturasGarantias(loError,'016000','Continente')

*!*	IF llError016000
*!*		loError.inser_er("V00240","oEspRiesgo",'Garantas de Continente','','')
*!*	endif
*!*

ENDPROC
PROCEDURE aplicardescuentosom
lparameters toEsp


if EMPTY(toEsp.omPorRestoAo)
	*- No tiene descuento
	retu
endif

*- Aplico los descuentos a las Garantias de Contenido y Continente
for i=1 to alen(toEsp.aGarantia,1)
	if !inlist(substr(toEsp.aGarantia(i,1),1,3),'018','010','012')	&& consorcio, rc y asistencia
		toEsp.aGarantia(i,6) = toEsp.aGarantia(i,6) * (1 - toEsp.omPorRestoAo/100)
	endif
endfor

ENDPROC
PROCEDURE creararrayimpresion
LPARAMETERS toEsp, tcRamo
LOCAL;
	lodbemdw0002
LOCAL ARRAY laDatos(1)

laDatos=''
lodbemdw0002=CREATEOBJECT('emdw0002')

toEsp.CrearCursorGarantia()
DO CASE
	CASE toEsp.TratEspecial='001'	&& CAJA MADRID 073
		SELECT * ;
			FROM curGarantia ;
			WHERE 	ra_cover IN ('010000','013000','015000','016000','005154','005155','006000','156000','157000','158000','023000') ;
			AND	ra_capital # 0;
			INTO ARRAY aTemp

		DIME toEsp.aImpresion (ALEN(aTemp,1) , ALEN(aTemp,2))
		ACOPY (aTemp, toEsp.aImpresion)

	CASE toEsp.TratEspecial='018'	&& CAJA MADRID Multiriesgo comercial
		SELECT * ;
			FROM curGarantia ;
			WHERE 	RA_COVER # '018019' AND (capital # 0  OR PRIMA # 0 );
			INTO ARRAY aTemp

		FOR i=1 TO ALEN(aTemp,1)
			IF aTemp(i,1)='013000'
				aTemp(i,4)='INCLUIDO'
				EXIT
			ENDIF
		ENDFOR

		DIME toEsp.aImpresion (ALEN(aTemp,1) , ALEN(aTemp,2))
		ACOPY (aTemp, toEsp.aImpresion)

	CASE INLIST(toEsp.TratEspecial,'002','012','016','017','019','020','021','022','023')		&& 001, 018
		*- Este case esta s porq en noviembre del 2002 se comenzo con una nueva forma de OED, y estos
		*- ramos son las que hasta ese momento ya estaban en real
		*- No incorpora los que no tiene valor en el capital
		SELECT * ;
			FROM curGarantia ;
			WHERE capital#0 AND RA_COVER#'018019' ;
			UNION	;
			SELECT * ;
			FROM curGarantia ;
			WHERE RA_COVER='018019' AND (capital # 0  OR PRIMA # 0 );
			INTO ARRAY aTemp

		DIME toEsp.aImpresion (ALEN(aTemp,1) , ALEN(aTemp,2))
		ACOPY (aTemp, toEsp.aImpresion)

	OTHERWISE
		SELECT * ;
			FROM curGarantia ;
			INTO ARRAY aTemp

		lodbemdw0002.recuperar_como_imprimir(@laDatos, toEsp.Modalidad, tcRamo)

		FOR i=1 TO ALEN(aTemp,1)
			IF SUBSTR(aTemp(I,1),1,3) #  '999'
				FOR j=1 TO ALEN(laDatos,1)
					IF aTemp(i,1)=laDatos(j,1)
						aTemp(i,12)=laDatos(j,2) && asigno la letra que indica como se imprime
						EXIT
					ENDIF
				ENDFOR
			else
				aTemp(i,12)=''	&& codigo para las libres
			ENDIF
			
			*- Reemplazo el punto por un blanco
			aTemp(i,2) = STRTRAN(aTemp(i,2),'.','')
		ENDFOR

		DIME toEsp.aImpresion (ALEN(aTemp,1) , ALEN(aTemp,2))
		ACOPY (aTemp, toEsp.aImpresion)


ENDCASE

toEsp.CerrarCursor('curGarantia')

ENDPROC
PROCEDURE vnetaminima
LPARAMETERS toEsp, tcFormaPago, tnNetaRecibo, toError

DO CASE
	CASE tcFormaPago='01' OR tcFormaPago='06'
		IF 	tnNetaRecibo < 30.05 && anual y de una vez
			toError.inser_er("V00241","oEspRiesgo","Prima neta de recibos es inferior al mnimo (30.05)",'','')
		ENDIF
	OTHERWISE
		*- Pago Fraccionado
		IF tnNetaRecibo < 18.03
			toError.inser_er("V00241","oEspRiesgo","Prima neta de recibos es inferior al mnimo (18.03)",'','')
		ENDIF
ENDCASE


ENDPROC
PROCEDURE quitarerrorescaja073
LPARAMETERS toError, toContenedor

lnId=ASCAN(toError.Matriz,'Provincia asegurado')
IF lnId#0
	lnFila=ASUBSCRIPT(toError.Matriz, lnId, 1)
	ADEL(toError.Matriz,lnFila)
	DIME toError.Matriz ( ALEN(toError.Matriz,1)-IIF(ALEN(toError.Matriz,1)=1,0,1), ALEN(toError.Matriz,2) )
ENDIF

lnId=0
lnId=ASCAN(toError.Matriz,'Provincia tomador')
IF lnId#0
	lnFila=ASUBSCRIPT(toError.Matriz, lnId, 1)
	ADEL(toError.Matriz,lnFila)
	DIME toError.Matriz ( ALEN(toError.Matriz,1)-IIF(ALEN(toError.Matriz,1)=1,0,1), ALEN(toError.Matriz,2) )
	IF ALEN(toError.Matriz,1)=1
		toError.Matriz=''
	ENDIF
ENDIF

IF !EMPTY(toContenedor.oriesgo.fefecsuple)
	lnId=0
	lnId=ASCAN(toError.Matriz,'oriesgo.fefecsuple')
	IF lnId#0
		lnFila=ASUBSCRIPT(toError.Matriz, lnId, 1)
		ADEL(toError.Matriz,lnFila)
		DIME toError.Matriz ( ALEN(toError.Matriz,1)-IIF(ALEN(toError.Matriz,1)=1,0,1), ALEN(toError.Matriz,2) )
		IF ALEN(toError.Matriz,1)=1
			toError.Matriz=''
		ENDIF
	ENDIF
ENDIF

lnId=0
lnId=ASCAN(toError.Matriz,'oriesgo.fecfirma')
IF lnId#0
	lnFila=ASUBSCRIPT(toError.Matriz, lnId, 1)
	ADEL(toError.Matriz,lnFila)
	DIME toError.Matriz ( ALEN(toError.Matriz,1)-IIF(ALEN(toError.Matriz,1)=1,0,1), ALEN(toError.Matriz,2) )
	IF ALEN(toError.Matriz,1)=1
		toError.Matriz=''
	ENDIF
ENDIF

ENDPROC
PROCEDURE iniciargarantiapordefecto
LPARAMETERS toEsp, tcTipoTarifa, tcTipOperacion
LOCAL i
i=0

WITH toEsp
	IF .TratEspeciaL='001'
		IF tcTipOperacion # '8'
			FOR i = 1 TO ALEN(.aGarantia,1)
				DO CASE
*!*							*- Continente y vvda secundaria
*!*						CASE .VvdaSecundaria='S' AND .aGarantia(i,1)='016000'
*!*							.aGarantia(i,4)=6010.12

						*- Continente y primer riesgo
					CASE .Vvda1Riesgo=1 AND .aGarantia(i,1)='016000'
						.aGarantia(i,4)=6010.12						

					CASE .aGarantia(i,1)='156000'
						*- TRATAMIENTO DE COBERTURA DE ATRACO FUERA DE HOGAR - 156000
						.aGarantia( i, 4) = 450.76
						IF tcTipoTarifa='S'
							.aGarantia( i, 5) = 6.01 / 450.76 * 1000
							.aGarantia( i, 6) = 6.01  && 
						ENDIF

					CASE .aGarantia(i,1)='157000'
						*- TRATAMIENTO DE COBERTURA DE DESPLAZAMIENTO EN VACACIONES - 157000
						.aGarantia( i, 4) = 3005.06
						IF tcTipoTarifa='S'
							.aGarantia( i, 5) = 12.02 / 3005.06 * 1000
							.aGarantia( i, 6) = 12.02
						ENDIF

					CASE .aGarantia(i,1)='023000'
						*- TRATAMIENTO DE COBERTURA DE ACCIDENTES CORPORALES - 023000
						.aGarantia( i, 4) = 6010.12
						IF tcTipoTarifa='S'
							.aGarantia( i, 5) = 12.02 / 6010.12 * 1000
							.aGarantia( i, 6) = 12.02
						ENDIF

					CASE .aGarantia(i,1)='013000'
						*- TRATAMIENTO DE COBERTURA DE DEFENSA JURIDICA 013000
						.aGarantia	( i, 4) = 3005.06
						IF tcTipoTarifa='S'
							.aGarantia	( i, 5) = 6.47 / 3005.06 * 1000
							.aGarantia ( i, 6) = 6.47 && 
						ENDIF
				ENDCASE
			ENDFOR
		ENDIF
	ENDIF
ENDWITH

*!*	WITH toEsp

*!*		IF tcTipOperacion='1'
*!*			IF .TratEspeciaL='001'
*!*				DO CASE
*!*						*- Continente y vvda secundaria
*!*					CASE .VvdaSecundaria='S' AND .aGarantia(tnFila,1)='016000'
*!*						.aGarantia(i,4)=6010.12

*!*					CASE .aGarantia(tnFila,1)='156000'
*!*						*- TRATAMIENTO DE COBERTURA DE ATRACO FUERA DE HOGAR - 156000
*!*						.aGarantia( tnFila, 4) = 450.76
*!*						IF tcTipoTarifa='S'
*!*							.aGarantia( tnFila, 5) = 6.01 / 450.76 * 1000
*!*							.aGarantia( tnFila, 6) = 6.01  && 
*!*						ENDIF

*!*					CASE .aGarantia(tnFila,1)='157000'
*!*						*- TRATAMIENTO DE COBERTURA DE DESPLAZAMIENTO EN VACACIONES - 157000
*!*						.aGarantia( tnFila, 4) = 3005.06
*!*						IF tcTipoTarifa='S'
*!*							.aGarantia( tnFila, 5) = 12.02 / 3005.06 * 1000
*!*							.aGarantia( tnFila, 6) = 12.02
*!*						ENDIF

*!*					CASE .aGarantia(tnFila,1)='023000'
*!*						*- TRATAMIENTO DE COBERTURA DE ACCIDENTES CORPORALES - 023000
*!*						.aGarantia( tnFila, 4) = 6010.12
*!*						IF tcTipoTarifa='S'
*!*							.aGarantia( tnFila, 5) = 12.02 / 6010.12 * 1000
*!*							.aGarantia( tnFila, 6) = 12.02
*!*						ENDIF
*!*
*!*					CASE .aGarantia(tnFila,1)='013000'
*!*						*- TRATAMIENTO DE COBERTURA DE DEFENSA JURIDICA 013000
*!*						.aGarantia	( tnFila, 4) = 3005.06
*!*						IF tcTipoTarifa='S'
*!*							.aGarantia	( tnFila, 5) = 6.47 / 3005.06 * 1000
*!*							.aGarantia ( tnFila, 6) = 6.47 && 
*!*						ENDIF
*!*				ENDCASE
*!*			ENDIF
*!*		ENDIF
*!*	ENDWITH

ENDPROC
PROCEDURE aplicardescuentomprimanue
lparameters toBusRecibo,  toEsp

if EMPTY(toEsp.omPorRestoAo)
	*- No tiene descuento
	retu
endif
local i
*- Aplica los descuentos a la matriz de recibos
for i=1 to alen(toBusRecibo.mPrimaNue,1)
	if !inlist(toBusRecibo.mprimanue(i,3) ,10,12)	&& RC y Asistencia
		toBusRecibo.mprimanue(i,5) =	toBusRecibo.mprimanue(i,5) * (1- toEsp.omPorRestoAo / 100)
	endif
endfor

ENDPROC
PROCEDURE vhabilitarmdv
*- Habilita o no la operativa de MDv a nivel de la aplicacion

local;
	lodbMdv0000, lcOperacion

lodbMdv0000=createobject('emdw0000')
lcOperacion=''
lcOperacion = lodbMdv0000.ListarOperaciones()
	
if vg_plataforma='WIN2000' and !empty( alltrim( lcOperacion ))
	retur .T.
ELSE	
	retur .F.
endif

ENDPROC
PROCEDURE vdescuentoomaplicables
Lparameters tcTipo, tcCodigo, tcContenedorC, tdFEfecSuple, tdFEfecIni
*- tcTipo, tipo de descuento (1er ao/restoaos)
*- tcCodigo (codigo del descuento)
Do CASE
Case tcTipo='1erAo'
	If TYPE('tcContenedorC')='O'
		If tcContenedorC.oApEsp.omCod1ao # tcCodigo
			If INLIST(tcCodigo,'8','1')
				Retu .T.
			Else
				Retu .F.
			Endif
		Else
			Retu .T.
		Endif
	Else
		If INLIST(tcCodigo,'8','1')
			Retu .T.
		Else
			Retu .F.
		Endif
	Endif

Case tcTipo='RestoAo'
	If TYPE('tcContenedorC')='O'
		If tcContenedorC.oApEsp.omCodRestoAo # tcCodigo
			Do case
			Case tcCodigo='19'
				If tdFEfecSuple - tdFEfecIni < 365
					Retu .t.
				Else
					Retu .F.
				Endif
			Case INLIST(tcCodigo,'2','3','5')
				Retu .T.
			Otherwise
				Retu .F.
			Endcase
		Else
			Retu .T.
		Endif
	Else
		Do CASE
		Case tcCodigo='19'
			If tdFEfecSuple - tdFEfecIni < 365
				Retu .t.
			Else
				Retu .F.
			Endif
		Case INLIST(tcCodigo,'2','3','5')
			Retu .T.
		Otherwise
			Retu .F.
		Endcase
	Endif

Endcase

ENDPROC
PROCEDURE recuperardesctemporal
LPARAMETERS toEsp
*- Recupera el descuento Temporal que alimenta a la propiedad desc temporal de recibos
*- Se aplica sobre el total de las netas, al calcular el recibo

*- Desde el 6/3/2002 por directiva de Neira
*- el descuento de aos sucesivos se comporta
*- como un descuento de 1er ao, es decir como Descuento Temporal 

DO CASE
*	CASE INLIST(toEsp.TratEspecial,'016','002','012') &&caja y finisterre
	CASE INLIST(toEsp.TratEspecial,'001','016','002','012') &&caja y finisterre && 21-03-03
		RETURN toEsp.omPor1Ao + toEsp.omPorRestoAo
		*	.omPor1Ao			&& porcentaje de descuento de 1er. ao, se aplican com uns descuento temporal de recibos
		*	.omPorRestoAo		&& porcentaje de descuento de aos sucesivos, se aplican garanta a garanta

	OTHERWISE
		RETURN 0
ENDCASE


ENDPROC
PROCEDURE habilitardatosinciales
Lparameters toEsp, toUsua
*- Usado para Habilitar el botoncito en los datos de negocio,donde se ven los datos inciales
*- normalmente esta habilitado para los ramos de CAJA

if toUsua.Entidad='30' or INLIST(toEsp.tratEspecial,'002','026') 
	retu .t.
else
	retu .f.
endif		
ENDPROC
PROCEDURE agruparmprimanue
LPARAMETERS toEsp, taMprimaNue

LOCAL lnTot015, lnTot016, lnCap015, lnCap016, ln010, lcCodDesg015, lcCodDesg016, lcModalidad015, lcModalidad016

STORE 0  TO lnTot015, lnTot016, lnCap015, lnCap016, lnTot010
STORE '' TO lcCodDesg015, lcCodDesg016

FOR i=1 TO ALEN(taMprimaNue,1)
	IF taMprimaNue(i,3)=15
		lnTot015 		= lnTot015 + taMprimaNue(i,5)
		lcCodDesg015 	= taMprimaNue(i,6)
		lnCap015		= taMprimaNue(i,7)
		lcModalidad015	= taMprimaNue(i,2)
	ENDIF

	IF taMprimaNue(i,3)=16
		lnTot016 		= lnTot016 + taMprimaNue(i,5)
		lcCodDesg016 	= taMprimaNue(i,6)
		lnCap016		= taMprimaNue(i,7)
		lcModalidad016	= taMprimaNue(i,2)
	ENDIF

	IF taMprimaNue(i,3)=10
		lnTot010 		= taMprimaNue(i,5)
	ENDIF

ENDFOR

DO CASE
		*- Tiene Contenido y Continente - divido la prima de RC en las 2
	CASE lnTot015  # 0 AND lnTot016 # 0
		lnTot015=lnTot015+ lnTot010 /2
		lnTot016=lnTot016+ lnTot010 /2

		*- Tiene solo Contenido - le sumo la prima de RC
	CASE lnTot015 # 0 AND lnTot016 = 0
		lnTot015=lnTot015+ lnTot010

		*- Tiene solo Continente - le sumo la prima de RC
	CASE lnTot016 # 0  AND lnTot015 = 0
		lnTot016=lnTot016+ lnTot010
ENDCASE

*- Ahora hay q borrar las garantias hijas, la RC (010000) 
LOCAL ARRAY laNuevo( 1 , ALEN (taMprimaNue,2))

FOR i = 1 TO ALEN (taMprimaNue,1)
	IF ! INLIST( taMprimaNue(i,3) , 15, 16, 10)
		oLibreria.Array_insertar_Copiar (@taMprimaNue, @laNuevo , i)
	ENDIF
ENDFOR

LOCAL lnNew

IF !EMPTY(lnTot015)
	lnNew = ALEN(laNuevo ,1) + 1
	DIME laNuevo  (lnNew , ALEN(laNuevo ,2))
	laNuevo ( lnNew,1) = '073'
	laNuevo ( lnNew,2) = lcModalidad015
	laNuevo ( lnNew,3) = 15
	laNuevo ( lnNew,4) = 1
	laNuevo ( lnNew,5) = lnTot015
	laNuevo ( lnNew,6) = lcCodDesg015
	laNuevo ( lnNew,7) = lnCap015
ENDIF

IF !EMPTY(lnTot016)
	lnNew = ALEN(laNuevo ,1) + 1
	DIME laNuevo  (lnNew , ALEN(laNuevo ,2))
	laNuevo ( lnNew,1) = '073'
	laNuevo ( lnNew,2) = lcModalidad016
	laNuevo ( lnNew,3) = 16
	laNuevo ( lnNew,4) = 1
	laNuevo ( lnNew,5) = lnTot016
	laNuevo ( lnNew,6) = lcCodDesg016
	laNuevo ( lnNew,7) = lnCap016
ENDIF

DIME taMprimaNue ( ALEN(laNuevo,1) , ALEN(laNuevo,2) )
ACOPY ( laNuevo, taMprimaNue )







ENDPROC
PROCEDURE v30hipmet001
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC


* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos



LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000, lcRamo

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Validacion del los datos comunes al riesgo
THIS.val_riesgo(toContenedor,iif(TYPE('toContenedorC')='O',toContenedorC,''))

*- Especfico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF

loEsp.CrearCursorGarantia()


*- Clausula 112
IF ASCAN(loEsp.aClausula,'112')=0
	loError.inser_er("V00241","oEspRiesgo","Clusula 112 no contratada.",'','')
ENDIF


*- Capitales mximos
local;
	lcCapitalMaxSub, lcCapitalMaxCen

SELECT capital FROM CurGarantia ;
	WHERE ra_cover='016001' ;
	INTO CURSOR cTemp

lcCapitalMaxSub = loEsp.aIncendio[ASUBSCRIPT(loEsp.aIncendio, ASCAN(loEsp.aIncendio, loEsp.CategoriaHip),1) , 6]
lcCapitalMaxCen = loEsp.aIncendio[ASUBSCRIPT(loEsp.aIncendio, ASCAN(loEsp.aIncendio, loEsp.CategoriaHip),1) , 7]

if 	cTemp.capital > lcCapitalMaxSub 
	if cTemp.capital < lcCapitalMaxCen 
		loError.inser_er("C00011","oEspRiesgo",'Suma asegurada Superior a '+alltrim(str(lcCapitalMaxSub,14,2)) +' ','','')
	else
		loError.inser_er("C00021","oEspRiesgo",'Suma asegurada Superior a '+alltrim(str(lcCapitalMaxCen ,14,2)) +' ','','')	
	endif	
endif


*- Finca Registral
IF EMPTY(ALLTRIM(loEsp.FincaRegistral))
	loError.inser_er("V00241","oEspRiesgo",'Finca Registral - valores no vlido','','')
ENDIF

*- Destino del documento para la impresion
*- ofinca/cliente
if loUsua.destdocum = 'C'
	loError.inser_er("V00241","oEspRiesgo",'El destino del documento debe ser Oficina','','')
endif

*- Validacin de Categoras Hip
lcRamo=''
lcRamo= loEsp.aIncendio[ASUBSCRIPT(loEsp.aIncendio, ASCAN(loEsp.aIncendio, loEsp.CategoriaHip),1) , 2]

IF loUsua.ramo # lcRamo
	loError.inser_er("V00240","oEspRiesgo",'Categora seleccionada no concuerda','','')
ENDIF


*- Controles tecnicos
*IF !EMPTY(loEsp.Desc_riesgo) OR !EMPTY(loEsp.Dato_especifico_riesgo) OR !EMPTY(loEsp.Beneficiario) OR !EMPTY(loEsp.textoLibre) OR !EMPTY(loEsp.Observ) OR !EMPTY(loEsp.ObserTec)
IF !EMPTY(loEsp.Desc_riesgo) OR !EMPTY(loEsp.Dato_especifico_riesgo) OR !EMPTY(loEsp.textoLibre) OR !EMPTY(loEsp.Observ) OR !EMPTY(loEsp.ObserTec)
	loError.inser_er("C00011","oEspRiesgo","Cumplimentacin datos a supervisar",'','')
ENDIF

*- Cesion de derecho y ModalProd=0501
IF loEsp.ModalProd='0501' AND (EMPTY(loEsp.entidad) OR EMPTY(loEsp.Referencia))
	loError.inser_er("V00241","oEspRiesgo",'Cesin de Derechos - Debe cumplimentar este dato','','')
ENDIF


*- Nro de garantas contratadas
SELECT * FROM CurGarantia WHERE !EMPTY(ra_cover) INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
	RETU
ENDIF

*- Validacion de Incendio Continente
SELECT * FROM CurGarantia ;
	WHERE ra_cover='016001' ;
	INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'Garanta de Incendio Continente - No contratada','','')
ENDIF


*- Validacion de Consorcio
SELECT * FROM CurGarantia ;
	WHERE ra_cover='018019' ;
	INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'Garanta de Consorcio - No contratada','','')
ENDIF


*- Validacion de la Categoria Hip
IF EMPTY(loEsp.CategoriaHip)
	loError.inser_er("V00240","oEspRiesgo",'Categora no seleccionada','','')
ENDIF

*- Validacion de la Actividad
IF EMPTY(loEsp.Actividad)
	loError.inser_er("V00240","oEspRiesgo",'Actividad no seleccionada','','')
ENDIF


*- Validacion de Incendio Continente
SELECT * FROM CurGarantia ;
	WHERE ra_cover='016001' AND (EMPTY(capital) OR EMPTY(PRIMA)) ;
	INTO CURSOR cTemp
IF _TALLY>0
	loError.inser_er("V00240","oEspRiesgo",'Garanta de Incendio Continente - valores no vlidos','','')
ENDIF

*- Validacion de Consorcio
SELECT * FROM CurGarantia ;
	WHERE ra_cover='018019' AND (EMPTY(capital) OR EMPTY(PRIMA)) ;
	INTO CURSOR cTemp
IF _TALLY>0
	loError.inser_er("V00240","oEspRiesgo",'Garanta de Consorcio - valores no vlidos','','')
ENDIF


*- Si en capital asegurado en INCENDIO en superior a 150.000.000 ptas.
SELECT * FROM CurGarantia ;
	WHERE 	ra_cover='016001' AND;
	capital >  901518.16 AND  capital < 1803036.31;
	INTO CURSOR cTemp
IF _TALLY>0
	loError.inser_er("C00011","oEspRiesgo","Capital Incendio Continente ",'','')
ENDIF


*- Si en capital asegurado en INCENDIO en superior a 300.000.000 ptas.
SELECT * FROM CurGarantia ;
	WHERE 	ra_cover='016001' AND;
	capital > 1803036.31;
	INTO CURSOR cTemp
IF _TALLY>0
	loError.inser_er("C00021","oEspRiesgo","Capital Incendio Continente ",'','')
ENDIF




ENDPROC
PROCEDURE cargargarantiaobligatoria
LPARAMETERS toEsp
*- Carga en la matriz de garantias las garantas obligatorias
*- Normalmente se utiliza para iniciar el ramo

LOCAL lnNewFila, llPrimaraVez
DIME toEsp.aGarantia (1,ALEN(toEsp.aGarantia,2))
llPrimaraVez=.T.
FOR i=1 TO ALEN(toEsp.aGarantiaTodas,1)
	IF inlist(toEsp.aGarantiaTodas(i,3),'1','2')	&& obligatoria
		IF llPrimaraVez
			llPrimaraVez=.F.
			lnNewFila=ALEN(toEsp.aGarantia,1)
		ELSE
			lnNewFila=ALEN(toEsp.aGarantia,1)+1
		ENDIF
		*!*			if i=1
		*!*				lnNewFila=1
		*!*			else
		*!*				lnNewFila=alen(toEsp.aGarantia,1)+1
		*!*			endif
		DIME toEsp.aGarantia (lnNewFila , ALEN(toEsp.aGarantia,2))
		FOR k=1 TO ALEN(toEsp.aGarantiaTodas,2)
			toEsp.aGarantia (lnNewFila, k) = toEsp.aGarantiaTodas (i, k)
		ENDFOR

		*- Agrega o no la Cobertura padre. -*
		*- Arrays para usarlos cuando se agreguen los padres a las garantias -*

		LOCAL ARRAY laGarantiaTodas(1,2)
		DIME laGarantiaTodas(ALEN(toEsp.aGarantiaTodas,1),ALEN(toEsp.aGarantiaTodas,2))
		ACOPY(toEsp.aGarantiaTodas, laGarantiaTodas)

		LOCAL ARRAY laEspGar	(1,2)
		DIME laEspGar (	ALEN(toEsp.aGarantia,1) 	, ALEN(toEsp.aGarantia,2) )
		ACOPY (toEsp.aGarantia, laEspGar )

		THIS.InsertarPadre( @laEspGar , @laGarantiaTodas , lnNewFila )

		DIME toEsp.aGarantia ( ALEN(laEspGar,1) , ALEN(laEspGar,2) )
		ACOPY (laEspGar , toEsp.aGarantia)
		RELE laEspGar

	ENDIF
ENDFOR



ENDPROC
PROCEDURE _016_tarificar
LPARAMETERS toEsp, tcTipOperacion
LOCAL ;
	ln016001, ln018019

STORE 0 TO ln016001, ln018019

FOR i=1 TO ALEN(toEsp.aGarantia,1)
	IF toEsp.aGarantia(i,1)='016001'
		ln016001=i
	ENDIF
	IF toEsp.aGarantia(i,1)='018019'
		ln018019=i
	ENDIF
ENDFOR


IF inlist(tcTipOperacion,'1','2')
	*- Incendio
	LOCAL ;
		lnPrima, lnTasa
*	lnPrima=ROUND(toEsp.aGarantia(ln016001,4) /1000 * IIF(toEsp.CategoriaHip='0',0.392, toEsp.aGarantia(ln016001,5)),2)
	lnPrima=ROUND(toEsp.aGarantia(ln016001,4) /1000 * toEsp.aGarantia(ln016001,5),2)
	IF lnPrima<30.05
		lnPrima=30.05
		lnTasa=ROUND(30.05 / toEsp.aGarantia(ln016001,4),4)
	ELSE
		lnTasa=ROUND(lnPrima / toEsp.aGarantia(ln016001,4),4)
	ENDIF
	toEsp.AGARANTIA[ln016001,5]=lnTasa
	toEsp.AGARANTIA[ln016001,6]=lnPrima
ENDIF

*- Consorcio
LOCAL ;
	lnConsorcio

lnConsorcio= toEsp.aIncendio[ASUBSCRIPT(toEsp.aIncendio, ASCAN(toEsp.aIncendio, toEsp.CategoriaHip),1) , 4]

toEsp.aGarantia(ln018019,4)=toEsp.aGarantia(ln016001,4)
toEsp.aGarantia(ln018019,5)=lnConsorcio
toEsp.aGarantia(ln018019,6)=ROUND(toEsp.aGarantia(ln018019,4) /1000 * lnConsorcio ,2)


ENDPROC
PROCEDURE tratarcons
LPARAMETERS toContenedor
LOCAL loDbMdv001
loDbMdv001=CREATEOBJECT('emdw0001')
#if debugmode
	toContenedor.oApEsp.CrearCursorGarantia()
	sele curGarantia
	copy to Garantia_recibidas type xls
	use
#endif

*- Recupero el tipo de tratamiento
*toContenedor.oApEsp.TratEspecial = loDbMdv001.RecuperarTipoTratamiento(toContenedor.oUsua.entidad, toContenedor.oUsua.ramo, toContenedor.oApEsp.Modalidad )
DO CASE

	
	CASE toContenedor.oApEsp.TratEspecial='018'
		*- Trata los Descuentos de Ordenes Ministeriales
		*- THIS.TratarOrdenesMinisteriales(toContenedor.oApEsp)

		*- Trata las Sobreprimas
		*- THIS.TratarSobrePrima(toContenedor.oApEsp)

		*- Tratar MprimaNue
		LOCAL ARRAY laTemp(1,1)

		DIME laTemp (ALEN(toContenedor.oBusRecibo.mPrimaNue,1), ALEN(toContenedor.oBusRecibo.mPrimaNue,2))
		ACOPY (toContenedor.oBusRecibo.mPrimaNue, laTemp)
		THIS._018_TratarMPrimaNUe(toContenedor.oApEsp, @laTemp)

		DIME toContenedor.oBusRecibo.mPrimaNue (ALEN(laTemp,1) , ALEN(laTemp,2))
		ACOPY (laTemp, toContenedor.oBusRecibo.mPrimaNue)


	CASE INLIST(toContenedor.oApEsp.TratEspecial,'001','002','012')

		*- Trata los Descuentos de Ordenes Ministeriales
		THIS.TratarOrdenesMinisteriales(toContenedor.oApEsp)

		*-19-6-2002
		*- Se puso dentro del if
		*!*			*- Trata las Sobreprimas
		*!*			THIS.TratarSobrePrima(toContenedor.oApEsp)

		IF toContenedor.oApEsp.TratEspecial='001'

			*- Trata las Sobreprimas
			THIS.TratarSobrePrima(toContenedor.oApEsp)

			*- Tratar MprimaNue
			LOCAL ARRAY laTemp(1,1)

			DIME laTemp (ALEN(toContenedor.oBusRecibo.mPrimaNue,1), ALEN(toContenedor.oBusRecibo.mPrimaNue,2))
			ACOPY (toContenedor.oBusRecibo.mPrimaNue, laTemp)
			THIS.AgruparMprimaNue(toContenedor.oApEsp, @laTemp)

			DIME toContenedor.oBusRecibo.mPrimaNue (ALEN(laTemp,1) , ALEN(laTemp,2))
			ACOPY (laTemp, toContenedor.oBusRecibo.mPrimaNue)
		ENDIF

		*- Aplicar los descuentos Fijos(garantia a garantia) si tiene desc.
		*- 6/2/2002
		*	This.AplicarDescuentosOM(toContenedor.oApEsp)
		*	This.AplicarDescuentoMPrimaNue(toContenedor.oBusRecibo,toContenedor.oApEsp)

	OTHERWISE
		*- Nada por ahora
ENDCASE

ENDPROC
PROCEDURE tratarmodalidad
LPARAMETER toEsp, tcRamoProd, tcEntidad, tcRamo, tcModRiesgoComuni, toContComunicaciones
*- Primer programa llamado desde la app de comunicaciones.
*- Este se llama desde la app de comunicaciones.
*- Recupera la modalidad de para la aplicacin.

*- toEsp,
*- tcRamoProd,
*- tcEntidad,
*- tcRamo,
*- tcModRiesgoComuni = Modalidad del objeto riesgo que recibi el contenedor de comunicaciones
LOCAL;
	loDbEmdw0003, lcModTemp, lcModalidad

lcModTemp=''
loDbEmdw0003=CREATEOBJECT('emdw0003')
loDbemdw0001=CREATEOBJECT('emdw0001')


DO CASE
	CASE tcRamoProd='061'
		*- 073 Caja Madrid
		*		IF EMPTY(toEsp.modalidad)
		IF EMPTY(tcModRiesgoComuni)
			toEsp.PrimeraVezPolizaCartera = .T.
		ELSE
			toEsp.PrimeraVezPolizaCartera = .F.
		ENDIF

		*- Asigno la modalidad CAJ para la aplicacin
		toEsp.modalidad = 'CAJ'

	CASE tcRamoProd='064'
		*- Cristales Mapfre
		*- Asigno la modalidad para la aplicacin

		IF TYPE('toContComunicaciones')='O'
			IF !EMPTY(toContComunicaciones.ORIES.modRies)
				toEsp.modalidad = toContComunicaciones.ORIES.modRies
			ELSE
				IF toContComunicaciones.ories.grupories='000' &&CRISTALES DIVERSOS
					toEsp.modalidad = 'CRD'
				ELSE
					toEsp.modalidad = 'CRA'
				ENDIF
			ENDIF
		ENDIF

	OTHERWISE

		*- 10/4/02
		*- Recupera la modalidad de la aplicacin
		IF !EMPTY(toEsp.ModalProd)
			lcModTemp = loDbEmdw0003.RecuperarModalidadAplicacion(toEsp.ModalProd,1)
		ELSE
			IF !EMPTY(toContComunicaciones.ories.RamoProd)
				lcModTemp = loDbEmdw0003.RecuperarMod_Entidad_Ramo_RamoProd(tcEntidad, tcRamo,toContComunicaciones.ories.RamoProd)
			ELSE
				lcModTemp = loDbEmdw0003.RecuperarModalidadAplicacion(toEsp.TratEspecial,2)
			ENDIF

		ENDIF

		*- Solo reemplazar si encuentra una equivalencia en la tabla
		IF !EMPTY(lcModTemp)
			toEsp.Modalidad = lcModTemp
		ENDIF

		*- Tratamiento de la Modalidad original de Cartera la guardo para luego recuperarla antes de la transmision
		toEsp.ModalidadOriginal  = toEsp.modalidad

		*- Caso de modalidad vacia (raro por cierto), entonces le pone el primero que encuentra en la tabla emdw0001 con proceso='000'
		IF EMPTY(toEsp.modalidad)
			#IF debugmode
				WAIT WIND NOWAIT 'Atencin, no tiene modalidad, y la esta recuperando con el proceso 000'
			#ENDIF

			LOCAL lcModalidad , loBusMdv
			lcModalidad=''
			loDbemdw0001.RecuperarModalidad000(	tcEntidad, tcRamo, '000', @lcModalidad)
			toEsp.modalidad = lcModalidad
		ENDIF
ENDCASE



*- Recupera el codigo de la garantia ofical para luego desglozar los registros en el comuni
IF toContComunicaciones.oRies.IndDivCom='1'
	*- Diversos - el comuni necesita saber cual es la garantia oficial en la cual se debe sumar todo para el reg 007
	*- Recuperar el codigo de la gara oficial
	lcOficial = loDbEmdw0001.recuperar_oficial(,tcEntidad, tcRamo, toEsp.modalidad)
	*- Agrego el codigo de la garantia oficial al esp
	=toEsp.ADDPROPERTY('Oficial',lcOficial)
ENDIF
ENDPROC
PROCEDURE vnetaminima016
LPARAMETERS toEsp, tcFormaPago, tnNetaRecibo, toError, tcTipOperacion, tcContenedorC

local ;
	toContenedorC, lnPrimaC 
	
lnPrimaC = 0	


*- NETA MINIMA PARA INCENDIO HIPOTECARIO
IF INLIST(tcTipOperacion,'1','2')
	DO CASE
		CASE INLIST(tcFormaPago,'01','06') AND tnNetaRecibo < 30.05 && anual y de una vez
			toError.inser_er("V00241","oEspRiesgo","Prima neta de recibos es inferior al mnimo (30.05)",'','')
		OTHERWISE
			*- Pago Fraccionado
			IF tnNetaRecibo < 18.03
				toError.inser_er("V00241","oEspRiesgo","Prima neta de recibos es inferior al mnimo (18.03)",'','')
			ENDIF
	ENDCASE
ELSE
**** ** *****
	toContenedorC=eval(tcContenedorC)
	lnPrimaC = toContenedorC.oBusRecibo.BuscaConcepto(2,'A')
	
	IF tnNetaRecibo # lnPrimaC
		DO CASE
			CASE INLIST(tcFormaPago,'01','06') AND lnPrimaC >= 30.05  AND tnNetaRecibo < 30.05  && anual y de una vez
				toError.inser_er("V00241","oEspRiesgo","Prima neta de recibos es inferior al mnimo (30.05)",'','')

			CASE !INLIST(tcFormaPago,'01','06') AND lnPrimaC >= 18.03 AND tnNetaRecibo < 18.03  && anual y de una vez
				toError.inser_er("V00241","oEspRiesgo","Prima neta de recibos es inferior al mnimo (18.03)",'','')
		ENDCASE
	ENDIF
ENDIF

ENDPROC
PROCEDURE vfecharecibos
LPARAMETERS toContenedor


*- Efecto
LOCAL;
	lcRet, lcCod, lcNivel, lcTexto

lcRet=''
lcRet=toContenedor.obusriesgo.vfefecsuple(toContenedor.oRiesgo.fefecsuple,'1', 'MDV')
IF lcRet#"0"
	loError.inser_er("V00240","oEspRiesgo","xx EFECTO",'','')
ENDIF


*- Vencimiento
lcRet=''
lcRet=toContenedor.obusriesgo.vfecVencimiento(toContenedor.oRiesgo.fefecsuple, toContenedor.oRiesgo.fecvencnat , toContenedor.oRiesgo.duraries, " ", "MDV")
IF lcRet # "0"
	loError.inser_er("V00240","oEspRiesgo","xx venc",'','')
ENDIF



ENDPROC
PROCEDURE v30074caj
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC



* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos


LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Especfico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF

*- Validacion del los datos comunes al riesgo
THIS.val_riesgo(toContenedor,iif(TYPE('toContenedorC')='O',toContenedorC,''))


loEsp.CrearCursorGarantia()

*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !EMPTY(ra_cover) ;
	INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
	RETU
ENDIF

*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !inlist(RA_COVER,'018019','023000') AND !EMPTY(RA_COVER) AND (EMPTY(CAPITAL) OR  EMPTY(PRIMA));
	INTO CURSOR cTemp
IF _TALLY>0
	loError.inser_er("V00240","oEspRiesgo",'Garantas Contratadas, valores no vlidas','','')
	RETU
ENDIF

*- Validacion de los valores de la cobertura de Accidentes
SELECT * FROM CurGarantia ;
	WHERE RA_COVER='023000' AND  (!EMPTY(CAPITAL) OR  !EMPTY(PRIMA));
	INTO CURSOR cTemp
IF _TALLY>0
	loError.inser_er("V00240","oEspRiesgo",'Garanta de Accidente, Capital y Prima deben ser 0','','')
	RETU
ENDIF


*- Valida que tenga consorcio si tiene alguna del 015 o 016
SELECT * FROM CurGarantia ;
	WHERE inlist(substr(RA_COVER,1,3),'015','016') ;
	INTO CURSOR cTemp
IF _TALLY>0
	SELECT * FROM CurGarantia ;
		WHERE RA_COVER='018019' ;
		INTO CURSOR cTemp
	if 	_TALLY=0
		loError.inser_er("V00240","oEspRiesgo",'Consorcio, Garanta no contratada','','')
	endif
ENDIF

*- Accidentes (garantia padre)
select * from CurGarantia ;
	where ra_cover='023000'  and (!empty(capital) or !empty(prima));
	into cursor cTemp	
if _tally>0
	loError.inser_er("V00240","oEspRiesgo",'Garanta de Accidentes - Capital y prima deben ser 0','','')
endif	
ENDPROC
PROCEDURE _016_iniciar
LPARAMETERS toContenedor, tcTextoRamo

LOCAL;
	loEsp,  lnFila, lnElemento

lnFila		=0
lnElemento	=0
loEsp =	toContenedor.oApEsp

DIME loEsp.ACLAUSULA(1,ALEN(loEsp.ACLAUSULA,2))

*- Clausual 112
loEsp.ACLAUSULA[1,1]="112"
loEsp.ACLAUSULA[1,2]="CLAUSULA HIPOTECARIA : CESION DE DERECHOS"
loEsp.ACLAUSULA[1,3]="112"

THIS.IniciarTariTasa(toContenedor)
loEsp.ModcGral='SG-4001'




*- Cargar las garantias por defecto
THIS.CargarGarantiaObligatoria(loEsp)

*- Tratamiento de la Actividad
for i=1 to alen(loEsp.aIncendio,1)
	if upper(loEsp.aIncendio(i,3)) $ upper(tcTextoRamo) and 'VIVIENDA' $ upper(tcTextoRamo) 
		loEsp.CategoriaHip	 =loEsp.aIncendio(i,1)
		loEsp.Actividad		 =loEsp.aIncendio(i,5)

		for m=1 to alen (loEsp.aGarantia,1)
			if loEsp.aGarantia(m,1) = '018019'
				loEsp.aGarantia(m,5)=loEsp.aIncendio(i,4)&& tasa de consorcio
				exit
			endif	
		endfor			

		*- Carga el combo de Actividads
		local loDBemdw0004
		Local array laActividad(1,2)
		
		loDBemdw0004=CREATEOBJECT('emdw0004')
		loDBemdw0004.Listar_Destino(@laActividad)
		for j=1 to alen (laActividad,1)
			if laActividad(j,1) = loEsp.Actividad	
				loEsp.NombreActividad=laActividad(j,2)
				exit
			endif	
		endfor	
	endif
endfor

ENDPROC
PROCEDURE v30080a00
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC



* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos


LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Especfico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF

loEsp.CrearCursorGarantia()

*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !EMPTY(ra_cover) ;
	INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
	RETU
ENDIF


*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !EMPTY(RA_COVER) AND (EMPTY(CAPITAL) OR  EMPTY(PRIMA)) and !Inlist(RA_COVER,'011014','017009');
	INTO CURSOR cTemp
IF _TALLY>0
	loError.inser_er("V00240","oEspRiesgo",'Garantas Contratadas, valores no vlidas','','')
	RETU
ENDIF






ENDPROC
PROCEDURE iniciartaritasa
LPARAMETERS toContenedor

*- En nueva Produccion
*- Prima de Tarifa  ='S'
*- Tasa Manual = 'N'

*- En suplementos
*- PRIMA TARIFA ACTUAL = 'X'
*- PRIMA ADQUIRIDA = 'S'
*- Tasa MANUAL = 'N'



DO CASE
	CASE toContenedor.oApEsp.TratEspecial='001' && Caja Madrid 073
		toContenedor.oRiesgo.TariTasa = IIF(toContenedor.oUsua.tipOperacion='1','S','X') && para que tarifique a prima de tarifa
	CASE toContenedor.oApEsp.TratEspecial='018' && Caja Madrid 073
			toContenedor.oRiesgo.TariTasa = IIF(toContenedor.oUsua.tipOperacion='1','S','X') && para que tarifique a prima de tarifa
	CASE toContenedor.oApEsp.TratEspecial='016' && Caja Madrid 073
			toContenedor.oRiesgo.TariTasa = IIF(toContenedor.oUsua.tipOperacion='1','S','X') && para que tarifique a prima de tarifa
	CASE inlist(toContenedor.oApEsp.TratEspecial,'024','025') && Cristales
			toContenedor.oRiesgo.TariTasa = IIF(toContenedor.oUsua.tipOperacion='1','S','X') && para que tarifique a prima de tarifa

	OTHERWISE
		toContenedor.oRiesgo.TariTasa = 'N'
ENDCASE

ENDPROC
PROCEDURE habilitarcoaseguro
lparameters tcContenedor
local;
	loContenedor

loContenedor=eval(tcContenedor)
if loContenedor.oUsua.Entidad='30'
	retu .f.
else
	DO CASE
		CASE loContenedor.oApEsp.tratespecial='822'
			retu .f.		
	otherwise
			retu .t.					
	ENDCASE
	
endif	
		
ENDPROC
PROCEDURE habilitarcapreaseguro
LPARAMETERS tcContenedor
LOCAL;
	toContenedor
toContenedor=EVAL(tcContenedor)


WITH toContenedor.oApEsp
	IF .TratEspecial='026'
		*- Acc, Renta Caja Madrid		
		retu .f.
	endif	
	IF .TieneMetodoCapitalReaseguro
		*- Tiene mtodo, y solo podr tocar el valor calculado el reasegurador
		IF VAL(oUsua.nivUsua)=9  AND vg_suscribe # 'C' AND toContenedor.oUsua.TipOperacion # '8'
			RETU .T.
		ELSE

			RETU .F.
		ENDIF
	ELSE
		*- No tiene metodo que calcule el capital de reaseguro,
		*- entonces lo tiene que poner a pedal
		IF vg_suscribe # 'C' AND toContenedor.oUsua.TipOperacion # '8'
			RETU .T.
		ELSE
			RETU .F.
		ENDIF
	ENDIF
ENDWITH

ENDPROC
PROCEDURE calcularprimasdefecto
LPARAMETERS toEsp , tcAccion, tnfila
*- Este mtodo calcula algunas primas en el momento de modificar o dar de alta alguna 
*- garantia en el listado de garantas contratadas, se lo llama desde el evento eventos 
*- de refresco de la lista

*- tcAccion ['ALTA'/'BAJA'/'MODIFICACION']
*- tnfila Opcional - numero de fila a evaluar

DO CASE
		*- Incendio Hipotecario
	CASE toEsp.TratEspecial='016'
		DO CASE
			CASE INLIST(tcAccion,'MODIFICACION','ALTA') and !empty(toEsp.CategoriaHip)

				LOCAL ;
					lnElemento, lnId018019, lnId016001, lnConsorcio
				STORE 0 TO lnElemento, lnId018019, lnId016001, lnConsorcio

				*- Consorcio
				lnElemento = ASCAN(toEsp.aGarantia,'018019' )
				lnId018019 = IIF(lnElemento#0,ASUBSCRIPT(toEsp.aGarantia, lnElemento ,1),0)

				*- 016001
				lnElemento = 0
				lnElemento = ASCAN(toEsp.aGarantia,'016001' )
				lnId016001 = IIF(lnElemento#0,ASUBSCRIPT(toEsp.aGarantia, lnElemento ,1),0)

				*- Recupero la tasa de consorcio de la matriz de Incendio del esp
				lnElemento = 0
				lnElemento = ASCAN(toEsp.aIncendio,toEsp.CategoriaHip)
				lnConsorcio= IIF(lnElemento#0,toEsp.aIncendio[ASUBSCRIPT(toEsp.aIncendio, lnElemento ,1) , 4],0)

				IF lnId018019#0 AND lnId016001#0
					toEsp.aGarantia( lnId018019,4) = toEsp.aGarantia( lnId016001,4)
					toEsp.aGarantia( lnId018019,5) = lnConsorcio
					toEsp.aGarantia( lnId018019,6) = lnConsorcio * toEsp.aGarantia( lnId018019,4) /1000
				ENDIF
		ENDCASE
ENDCASE

ENDPROC
PROCEDURE lista_vmodificar
LPARAMETERS toEsp, tnFila
WITH toEsp
	DO CASE
			*- Incendio Hipoetacario de caja
		CASE .TratEspecial='016'
			RETU .T.
		CASE .TratEspecial='024'
			IF .aGarantia(tnFila,1)#'018019'
				RETU .T.
			ELSE
				RETU .F.
			ENDIF
		CASE .TratEspecial='025'
			IF .aGarantia(tnFila,1)#'018019'
				RETU .T.
			ELSE
				RETU .F.
			ENDIF

		OTHERWISE
			RETU .T.
	ENDCASE
ENDWITH &&toEsp

ENDPROC
PROCEDURE _018_tarificar
LPARAMETERS toEsp, tcTipOperacion, tcCodPostRiesgo, tcTariTasa


*- Mtodo de tarificacion a prima de Tarifa para el ramo 074 (Multiriesgo comercios de caja)
LOCAL ;
	lcTemp, lcTemp2, lnTasa, lnPrima, lnTemp, lnTemp2, lnPorcentajeRobo, lnTotNetaMinima, lnPrimaNetaC

STORE '' TO lcTemp, lcTemp2
STORE 0  TO lnTasa, lnPrima, lnTemp, lnTemp2, lnPorcentajeRobo, lnTotNetaMinima, lnPrimaNetaC

LOCAL;
	lnId015000, lnId013000, lnId016004, lnId012000, lnId010000, ;
	lnId016000, lnId023000, lnId018019, lnId163000, lnId164000, ;
	lnId165000, lnId031000, lnId032000, lnId071000, lnId023024, ;
	lnId023025, lnId004000, lnId160000, lnId161000, lnId159000, lnId162000

STORE 0 TO 	;
	lnId015000, lnId013000, lnId016004, lnId012000, lnId010000, ;
	lnId016000, lnId023000, lnId018019, lnId163000, lnId164000, ;
	lnId165000, lnId031000, lnId032000, lnId071000, lnId023024, ;
	lnId023025, lnId004000, lnId160000, lnId161000, lnId159000, lnId162000

WITH toEsp
	*- Recupera las posiciones de las Garantias
	FOR i=1 TO ALEN(.aGarantia,1)
		lcTemp	='lnId'+.aGarantia(i,1)
		&lcTemp	= i
	ENDFOR

	*- Recupera la forma de tarificar (prima tarifca,tasa, adquirida)
	FOR i=1 TO ALEN(THIS.aGarantiaTipoTarifa,1)

		*- T_lnId = Tipo Tarifa en el array
		lcTemp	='T_lnId'+THIS.aGarantiaTipoTarifa(i,1)
		LOCAL;
			&lcTemp
		&lcTemp	= THIS.aGarantiaTipoTarifa(i,2)

		*- F_lnId = Fila en el array
		lcTemp	='F_lnId'+THIS.aGarantiaTipoTarifa(i,1)
		LOCAL;
			&lcTemp
		&lcTemp	= i

	ENDFOR

	*- PRIMA TARIFA ACTUAL = 'X'
	*- PRIMA ADQUIRIDA = 'S'
	*- Tasa MANUAL = 'N'

	*- Continente 016000
	IF lnId016000 # 0
		IF tcTariTasa = 'S' AND T_lnId016000='S'
			.aGarantia(lnId016000 ,5) = THIS.aGarantiaTipoTarifa(F_lnId016000 ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId016000 ,6) = .aGarantia(lnId016000 ,4) * .aGarantia(lnId016000 ,5) / 1000
		ELSE
			lnTasa=0
			IF .ContinentePrimerRiesgo='S'
				*- A primer Riesgo
				DO CASE
					CASE .CodigoModalidad='A'
						lnTasa = IIF(.NuevaTarifa, 8.437, 6.75)
					CASE .CodigoModalidad='B'
						lnTasa = IIF(.NuevaTarifa, 9.812, 7.85)
					CASE .CodigoModalidad='C'
						lnTasa = IIF(.NuevaTarifa, 10.812, 8.65)
				ENDCASE
			ELSE
				DO CASE
					CASE .CodigoModalidad='A'
						lnTasa = IIF(.NuevaTarifa, 1.375, 1.1)
					CASE .CodigoModalidad='B'
						lnTasa = IIF(.NuevaTarifa, 1.750, 1.4)
					CASE .CodigoModalidad='C'
						lnTasa = IIF(.NuevaTarifa, 2.250, 1.8)
				ENDCASE
			ENDIF
			*- Calculo la Prima
			.aGarantia(lnId016000,6) = .aGarantia(lnId016000,4) / 1000 * lnTasa

			*- Recargos
			*- Ninguno

		ENDIF
		*- Descuentos
		IF .CentralAlarma='S'
			.aGarantia(lnId016000,6) = .aGarantia(lnId016000,6) - .aGarantia(lnId016000,6) * IIF(.NuevaTarifa, 0.15, 0.20)
		ENDIF

	ENDIF

	*- Contenido 015000
	IF lnId015000 # 0
		IF tcTariTasa = 'S' AND T_lnId015000='S'
			.aGarantia(lnId015000 ,5) = THIS.aGarantiaTipoTarifa(F_lnId015000 ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId015000 ,6) = .aGarantia(lnId015000 ,4) * .aGarantia(lnId015000 ,5) / 1000
			*- Descuentos
			IF .CentralAlarma='S'
				.aGarantia(lnId015000,6) = .aGarantia(lnId015000,6) - .aGarantia(lnId015000,6) * IIF(.NuevaTarifa, 0.15, 0.2)
			ENDIF
		ELSE
			lnTasa=0
			DO CASE
				CASE .CodigoModalidad='A'
					lnTasa = IIF(.NuevaTarifa, 2.375, 1.9 )
				CASE .CodigoModalidad='B'
					lnTasa = IIF(.NuevaTarifa, 2.625, 2.1 )
				CASE .CodigoModalidad='C'
					lnTasa = IIF(.NuevaTarifa, 3.500 , 2.8)
			ENDCASE
			*- Calculo la Prima
			.aGarantia(lnId015000,6) = .aGarantia(lnId015000,4) / 1000 * lnTasa

			*- Calculo del capital
			.aGarantia(lnId015000,4) = .Promedio + .MaquinariaMobiliario

			*- Descuentos
			IF .CentralAlarma='S'
				.aGarantia(lnId015000,6) = .aGarantia(lnId015000,6) - .aGarantia(lnId015000,6) * IIF(.NuevaTarifa, 0.15, 0.2)
			ENDIF

			IF .NuevaTarifa AND tcTariTasa = 'X'
				DO CASE
						*- Tiene Cdo y Cte
					CASE lnId015000 # 0 AND lnId016000 # 0
						IF INLIST(.CodigoModalidad,'A','B') 
							IF .aGarantia(lnId015000,6) + .aGarantia(lnId016000,6) < 60
								.aGarantia(lnId015000,6) = 30
								.aGarantia(lnId016000,6) = 30
							ELSE
								*- Nada					
							ENDIF	
						ELSE
							*- C
							IF .aGarantia(lnId015000,6) + .aGarantia(lnId016000,6) < 90
								.aGarantia(lnId015000,6) = 45
								.aGarantia(lnId016000,6) = 45
							else
								*- Nada	
							ENDIF
						ENDIF
						
						*- Tiene Cdo y NO Cte
					CASE lnId015000 # 0 AND lnId016000 = 0
						IF INLIST(.CodigoModalidad,'A','B') 
							if .aGarantia(lnId015000,6) < 60
								.aGarantia(lnId015000,6) = 60
							else
								*- Nada
							endif	
						ELSE
							*- C
							IF .aGarantia(lnId015000,6) < 90
								.aGarantia(lnId015000,6) = 90
							else
								*- Nada	
							ENDIF
						ENDIF

						*- Tiene NO Cdo y Cte
					CASE lnId015000 = 0 AND lnId016000 # 0
						IF INLIST(.CodigoModalidad,'A','B') 
							if .aGarantia(lnId016000,6) < 60
								.aGarantia(lnId016000,6) = 60
							else
								*- Nada
							endif	
						ELSE
							IF .aGarantia(lnId016000,6) < 90
								.aGarantia(lnId016000,6) = 90
							else
								*- Nada	
							ENDIF
						ENDIF
				ENDCASE
			ENDIF	&&.NuevaTarifa
		ENDIF	&&tcTariTasa = 'S' AND T_lnId015000='S'
	ENDIF

	*- Defensa jurdica
	IF lnId013000 # 0
		IF tcTariTasa = 'S' AND T_lnId013000 ='S'
			.aGarantia(lnId013000  ,5) = THIS.aGarantiaTipoTarifa(F_lnId013000  ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId013000  ,6) = .aGarantia(lnId013000  ,4) * .aGarantia(lnId013000  ,5) / 1000
		ELSE
			.aGarantia(lnId013000,4)=3005.06
			IF (.Empleados + .Titulares) <= 5
				.aGarantia(lnId013000,6) = IIF(.NuevaTarifa, 12.62, 12.62)
			ELSE
				.aGarantia(lnId013000,6) = IIF(.NuevaTarifa, (.Empleados + .Titulares) * 2.94, (.Empleados + .Titulares) * 2.94 )
			ENDIF
		ENDIF
	ENDIF

	*- Asistencia
	IF lnId012000 # 0
		IF tcTariTasa = 'S' AND T_lnId012000 ='S'
			.aGarantia(lnId012000  ,5) = THIS.aGarantiaTipoTarifa(F_lnId012000  ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId012000  ,6) = THIS.aGarantiaTipoTarifa(F_lnId012000  ,6)
		ELSE
			IF tcTariTasa = 'S' AND T_lnId012000 ='S'
				.aGarantia(lnId012000  ,5) = THIS.aGarantiaTipoTarifa(F_lnId012000  ,5) && Mantengo la Tasa de Cartera
				.aGarantia(lnId012000  ,6) = .aGarantia(lnId012000  ,4) * .aGarantia(lnId012000  ,5) / 1000
			ELSE
				IF (.Empleados + .Titulares) <= 5
					.aGarantia(lnId012000,6) = IIF(.NuevaTarifa, 9.38, 9.38)
				ELSE
					.aGarantia(lnId012000,6) = IIF(.NuevaTarifa, (.Empleados + .Titulares) * 2.94, 9.38)
				ENDIF
			ENDIF
		ENDIF
	ENDIF
	.aGarantia(lnId012000,5) = 0
	.aGarantia(lnId012000,4) = 0


	*- Responsabilidad Civil
	*- Crear la garantia de RC quitando 1500 pelas de cte o ctdo antes de transmitir
	*- Capital 150253.03
	*- Prima = 0
	*!*		IF lnId010000#0 AND (lnId016000 # 0 OR lnId015000 # 0  )
	*!*			.aGarantia(lnId010000 , 4) = 150253.03
	*!*		ENDIF

	*- Ampliacion de Responsabilidad Civil
	IF lnId164000 # 0
		IF tcTariTasa = 'S' AND T_lnId164000 ='S'
			.aGarantia(lnId164000  ,5) = THIS.aGarantiaTipoTarifa(F_lnId164000  ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId164000  ,6) = .aGarantia(lnId164000  ,4) * .aGarantia(lnId164000  ,5) / 1000
		ELSE
			IF .ContinentePrimerRiesgo='S'
				.aGarantia(lnId164000,6) = IIF(lnId016000#0 , .aGarantia(lnId016000,4),0) * IIF(.NuevaTarifa, 1.716, 1.56) /1000 + IIF(lnId015000#0 , .aGarantia(lnId015000,4) , 0) * IIF(.NuevaTarifa, 0.193, 0.175) /1000
			ELSE
				.aGarantia(lnId164000,6) = IIF(lnId016000#0 , .aGarantia(lnId016000,4),0) * IIF(.NuevaTarifa, 0.088, 0.08) /1000 + IIF(lnId015000#0 , .aGarantia(lnId015000,4) , 0) * IIF(.NuevaTarifa, 0.193, 0.175) /1000
			ENDIF
		ENDIF
	ENDIF


	*- Trabajo Fuera del local
	IF lnId163000#0
		IF tcTariTasa = 'S' AND T_lnId163000 ='S'
			.aGarantia(lnId163000,5) = THIS.aGarantiaTipoTarifa(F_lnId163000  ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId163000,6) = .aGarantia(lnId163000,4) * .aGarantia(lnId163000,5) / 1000
		ELSE
			*- Nada, se respeta la prima y tasa que puso
			.aGarantia(lnId163000,4)=0
			.aGarantia(lnId163000,5)=0
		ENDIF

		*- SobrePrima por OMinisterial
		IF .omImptfLocal#0
			.aGarantia(lnId163000,6) = .aGarantia(lnId163000,6) + .omImptfLocal
		ENDIF
	ENDIF

	*- Ampliacin de Roturas

	IF lnId165000 # 0
		IF tcTariTasa = 'S' AND T_lnId165000  ='S'
			.aGarantia(lnId165000 ,5) = THIS.aGarantiaTipoTarifa(F_lnId165000   ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId165000 ,6) = .aGarantia(lnId165000 ,4) * .aGarantia(lnId165000 ,5) / 1000
		ELSE
			.aGarantia(lnId165000,6) = (.aGarantia(lnId165000,4)- .CapitalBasico_165000) * IIF(.NuevaTarifa, 16.5, 15) /1000
		ENDIF
	ENDIF

	*- Imdemnizacion diaria
	IF lnId031000 # 0
		IF tcTariTasa = 'S' AND T_lnId031000  ='S'
			.aGarantia(lnId031000 ,5) = THIS.aGarantiaTipoTarifa(F_lnId031000   ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId031000 ,6) = .aGarantia(lnId031000 ,4) * .aGarantia(lnId031000 ,5) / 1000
		ELSE
			DO CASE
				CASE .CapitalIndemnizacion = 60.10
					.aGarantia(lnId031000,6) = IIF(.NuevaTarifa, 24, 21.58)
				CASE .CapitalIndemnizacion = 150.25
					.aGarantia(lnId031000,6) = IIF(.NuevaTarifa, 60, 53.96)
				CASE .CapitalIndemnizacion = 300.51
					.aGarantia(lnId031000,6) = IIF(.NuevaTarifa, 120, 107.91)
				OTHERWISE
					.aGarantia(lnId031000,6) = 0
			ENDCASE
		ENDIF
	ENDIF

	*- Avera de Maquinaria
	IF lnId032000#0
		IF tcTariTasa = 'S' AND T_lnId032000  ='S'
			.aGarantia(lnId032000 ,5) = THIS.aGarantiaTipoTarifa(F_lnId032000   ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId032000 ,6) = .aGarantia(lnId032000 ,4) * .aGarantia(lnId032000 ,5) / 1000
		ELSE
			.aGarantia(lnId032000,6) = .aGarantia(lnId032000,4) * IIF(.NuevaTarifa, 6.655, 6.5) /1000
		ENDIF
	ENDIF

	*- Mercancias en Camara
	IF lnId071000 # 0
		IF tcTariTasa = 'S' AND T_lnId071000  ='S'
			.aGarantia(lnId071000 ,5) = THIS.aGarantiaTipoTarifa(F_lnId071000   ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId071000 ,6) = .aGarantia(lnId071000 ,4) * .aGarantia(lnId071000 ,5) / 1000
		ELSE
			.aGarantia(lnId071000 ,6) = IIF(.NuevaTarifa, 180.00, 97.66)
		ENDIF
	ENDIF

	*- Fallecimiento Accidental
	IF lnId023024 # 0
		IF tcTariTasa = 'S' AND T_lnId023024  ='S'
			.aGarantia(lnId023024 ,5) = THIS.aGarantiaTipoTarifa(F_lnId023024   ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId023024 ,6) = .aGarantia(lnId023024 ,4) * .aGarantia(lnId023024 ,5) / 1000
		ELSE
			.aGarantia(lnId023024,6) = .aGarantia(lnId023024,4) * IIF(.NuevaTarifa, 0.55, 0.55) /1000
		ENDIF
	ENDIF

	*- Invalidez Permanente
	IF lnId023025 # 0
		IF tcTariTasa = 'S' AND T_lnId023025  ='S'
			.aGarantia(lnId023025 ,5) = THIS.aGarantiaTipoTarifa(F_lnId023025   ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId023025 ,6) = .aGarantia(lnId023025 ,4) * .aGarantia(lnId023025 ,5) / 1000
		ELSE
			.aGarantia(lnId023025,6) = .aGarantia(lnId023025,4) * IIF(.NuevaTarifa, 0.55, 0.55) /1000
		ENDIF
	ENDIF


	*- Robo Continente
	IF lnId016004 # 0
		IF tcTariTasa = 'S' AND T_lnId016004 ='S'
			.aGarantia(lnId016004 ,5) = THIS.aGarantiaTipoTarifa(F_lnId016004   ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId016004 ,6) = .aGarantia(lnId016004 ,4) * .aGarantia(lnId016004 ,5) / 1000
		ELSE
			.aGarantia(lnId016004 ,6) = IIF(.NuevaTarifa, 60, 35.16)
			.aGarantia(lnId016004 ,4) = 3005.06
		ENDIF
	ENDIF

	*- Robo Dinero en Caja Fuerte
	IF lnId160000 # 0
		IF tcTariTasa = 'S' AND T_lnId016000 ='S'
			.aGarantia(lnId016000 ,5) = THIS.aGarantiaTipoTarifa(F_lnId016000   ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId016000 ,6) = .aGarantia(lnId016000 ,4) * .aGarantia(lnId016000 ,5) / 1000
		ELSE
			.aGarantia(lnId160000 ,6) = (.aGarantia(lnId160000 ,4) - .CapitalBasico_160000) * IIF(.NuevaTarifa, 16.5, 15) /1000
		ENDIF
	ENDIF

	*- Robo Dinero Fuera de Caja Fuerte
	IF lnId161000 # 0
		IF tcTariTasa = 'S' AND T_lnId161000 ='S'
			.aGarantia(lnId161000 ,5) = THIS.aGarantiaTipoTarifa(F_lnId161000   ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId161000 ,6) = .aGarantia(lnId161000 ,4) * .aGarantia(lnId161000 ,5) / 1000
		ELSE
			.aGarantia(lnId161000 ,6) = (.aGarantia(lnId161000 ,4) - .CapitalBasico_161000) * IIF(.NuevaTarifa, 55, 50) /1000
		ENDIF
	ENDIF

	*- Transporte de Fondos
	IF lnId159000 # 0
		IF tcTariTasa = 'S' AND T_lnId159000 ='S'
			.aGarantia(lnId159000 ,5) = THIS.aGarantiaTipoTarifa(F_lnId159000   ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId159000 ,6) = .aGarantia(lnId159000 ,4) * .aGarantia(lnId159000 , 5) / 1000
		ELSE
			.aGarantia(lnId159000 ,6) = (.aGarantia(lnId159000 ,4) - .CapitalBasico_159000) * IIF(.NuevaTarifa, 11, 10) /1000
		ENDIF
	ENDIF

	*- Robo en Escaparate
	IF lnId162000 # 0
		IF tcTariTasa = 'S' AND T_lnId162000 ='S'
			.aGarantia(lnId162000 ,5) = THIS.aGarantiaTipoTarifa(F_lnId162000   ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId162000 ,6) = .aGarantia(lnId162000 ,4) * .aGarantia(lnId162000 , 5) / 1000
		ELSE
			.aGarantia(lnId162000 ,6) = (.aGarantia(lnId162000 ,4) - .CapitalBasico_162000)* IIF(.NuevaTarifa, 33, 30) /1000
		ENDIF
	ENDIF


	*- ROBO  (508)
	IF lnId004000 # 0
		IF tcTariTasa = 'S' AND T_lnId004000 ='S'
			.aGarantia(lnId004000 ,5) = THIS.aGarantiaTipoTarifa(F_lnId004000   ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId004000 ,6) = .aGarantia(lnId004000 ,4) * .aGarantia(lnId004000 ,5) / 1000
		ELSE
			*- Setea el capital
			*IF .PorcentajeCapitalRobo = 100
			IF .PorcentajeCapitalRobo = '07'
				.aGarantia(lnId004000,4) = .aGarantia(lnId015000,4)
			ELSE
				*- Recupera el valor de porcentaje
				lnPorcentajeRobo=0
				FOR k=1 TO ALEN(.aPorcentajeRobo,1)
					IF .aPorcentajeRobo(k,4)=.PorcentajeCapitalRobo
						lnPorcentajeRobo=.aPorcentajeRobo(k,3)
						EXIT
					ENDIF
				ENDFOR
				*- Aplica el porcentaje
				*.aGarantia(lnId004000,4) = .aGarantia(lnId015000,4) * .PorcentajeCapitalRobo /100
				.aGarantia(lnId004000,4) = .aGarantia(lnId015000,4) * lnPorcentajeRobo /100
			ENDIF

			LOCAL;
				lnPrima, lnDescProteccion, lnDescValorParcial

			lnPrima=0

			*- Calcula el Tipo de Poblacion
			IF INLIST(SUBSTR(tcCodPostRiesgo,1,3),'030','080','089','083','082','110','120','180','210','280','288','289','290','320','350','360','410','460','480') OR INLIST(tcCodPostRiesgo,'28223','28224','28100','28223','28700')
				lcTipoPoblacion = 'X'
			ELSE
				lcTipoPoblacion = 'Y'
			ENDIF

			*- Calcula los niveles de proteccion
			DO CASE
				CASE lcTipoPoblacion = 'X'
					.NivelMinimo=.NivelMinimoX

				CASE lcTipoPoblacion = 'Y'
					.NivelMinimo=.NivelMinimoY
			ENDCASE

			*- Prima inicial de robo
			lnPrima = THIS._018_CalcularPrimaRobo(toEsp, .aGarantia(lnId015000 ,4), VAL(.GrupoRobo), lcTipoPoblacion)

			.aGarantia(lnId004000,6)= lnPrima
		ENDIF

		*- SobrePrima por OMinisterial
		IF .omPorRobo#0
			.aGarantia(lnId004000,6)=.aGarantia(lnId004000,6) + .aGarantia(lnId004000,6) * .omPorRobo/100
		ENDIF
	ENDIF


	*-Consorcio
	IF lnId018019#0
		IF tcTariTasa = 'S' AND T_lnId018019 ='S'
			*			.aGarantia(lnId018019 ,5) = THIS.aGarantiaTipoTarifa(F_lnId018019   ,5) && Mantengo la Tasa de Cartera
			.aGarantia(lnId018019 ,5) = 0
			.aGarantia(lnId018019 ,6) = THIS.aGarantiaTipoTarifa(F_lnId018019   ,6)
		ELSE
			*- Consorcio de daos
			.aGarantia(lnId018019,4) = IIF(lnId015000#0,.aGarantia(lnId015000,4),0)+IIF(lnId016000#0,.aGarantia(lnId016000,4),0)
			DO CASE
				CASE .CodigoConsorcio='01'
					lnTasa = 0.14
				CASE .CodigoConsorcio='02'
					lnTasa = 0.18
				CASE .CodigoConsorcio='03'
					lnTasa = 0.25
			ENDCASE
			*!*				IF .ContinentePrimerRiesgo='S'
			*!*					lnTasa = lnTasa * 4
			*!*				ENDIF
			.aGarantia(lnId018019,6) =.aGarantia(lnId018019,4) * lnTasa /1000

			.aGarantia(lnId018019,6) = 0
			IF lnId015000 # 0
				.aGarantia(lnId018019,6) = .aGarantia(lnId015000,4) * lnTasa /1000
			ENDIF

			IF lnId016000 # 0
				IF .ContinentePrimerRiesgo='S'
					.aGarantia(lnId018019,6) = .aGarantia(lnId018019,6) + .aGarantia(lnId016000,4) * lnTasa * 4 / 1000
				ELSE
					.aGarantia(lnId018019,6) = .aGarantia(lnId018019,6) + .aGarantia(lnId016000,4) * lnTasa / 1000
				ENDIF
			ENDIF

			*- Consorcio de Accidentes
			lnTemp	= MAX(IIF(lnId023024#0 , .aGarantia(lnId023024,4) , 0) , IIF(lnId023025#0, .aGarantia(lnId023025,4) , 0))
			lnTemp2	= lnTemp * 0.0096 / 1000

			*- Total de Consorcios
			.aGarantia(lnId018019,4) = .aGarantia(lnId018019,4) + lnTemp
			.aGarantia(lnId018019,6) = .aGarantia(lnId018019,6) + lnTemp2
		ENDIF
	ENDIF

	*- Capital de Reaseguro
	*- contenido+ cte + robo + acc + inva + averia maq
	.capireas = IIF(lnId016000#0 , .aGarantia(lnId016000,4) , 0)+ IIF(lnId015000#0 , .aGarantia(lnId015000,4) , 0) + IIF(lnId032000#0 , .aGarantia(lnId032000,4) , 0) +  IIF(lnId004000#0 , .aGarantia(lnId004000,4) , 0) + IIF(lnId023024#0 , .aGarantia(lnId023024,4) , 0) + IIF(lnId023025#0 , .aGarantia(lnId023025,4) , 0)


	*- Prima Minima
	lnTotNetaMinima=0

	FOR I=1 TO ALEN(.aGarantia,1)
		IF .aGarantia(i,1) # '018019'
			lnTotNetaMinima = lnTotNetaMinima + .aGarantia(i,6)
		ENDIF
	ENDFOR
	
	*- PRIMA TARIFA ACTUAL = 'X'
	*- PRIMA ADQUIRIDA = 'S'
	*- Tasa MANUAL = 'N'
	IF INLIST(tcTipOperacion,'1','2','6')
		IF tcTariTasa = 'X'
			*- PRIMA TARIFA ACTUAL
			IF  lnTotNetaMinima  < 112
				IF lnId015000 # 0
					.aGarantia(lnId015000 ,6) = .aGarantia(lnId015000 ,6) + 112 - lnTotNetaMinima
				ELSE
					.aGarantia(lnId016000 ,6) = .aGarantia(lnId016000 ,6) + 112 - lnTotNetaMinima
				ENDIF
			ENDIF
		ELSE
			*- Tasa Manual
			*- Se respeta lo que ponga
		ENDIF
	ELSE
		*- Suplementos
		*- Recupera la Neta de cartera
		lnPrimaNetaC = this.Obtener_prima_neta_anterior(this.oContenedor.oBusRecibo)
		
		if lnPrimaNetaC >= 112
			if lnTotNetaMinima < 112
				IF lnId015000 # 0
					.aGarantia(lnId015000 ,6) = .aGarantia(lnId015000 ,6) + 112 - lnTotNetaMinima
				ELSE
					.aGarantia(lnId016000 ,6) = .aGarantia(lnId016000 ,6) + 112 - lnTotNetaMinima
				ENDIF
			else
				*- Se mantiene la prima calculada
			endif
		else
			*- Se mantiene la prima calculada
		endif	
		 
*!*			DO CASE
*!*				CASE  tcTariTasa = 'X'
*!*					*- PRIMA TARIFA ACTUAL
*!*					IF  lnTotNetaMinima  < 90
*!*						IF lnId015000 # 0
*!*							.aGarantia(lnId015000 ,6) = .aGarantia(lnId015000 ,6) + 90 - lnTotNetaMinima
*!*						ELSE
*!*							.aGarantia(lnId016000 ,6) = .aGarantia(lnId016000 ,6) + 90 - lnTotNetaMinima
*!*						ENDIF
*!*					ENDIF

*!*				CASE tcTariTasa = 'S'
*!*					*- Prima Adquirida
*!*					FOR i=1 TO ALEN(THIS.aGarantiaTipoTarifa,1)
*!*						IF THIS.aGarantiaTipoTarifa(i,2)='X'
*!*							*- Al menos una garanta se tuvo que retarificar, entonces aplico mnima
*!*							IF  lnTotNetaMinima  < 90
*!*								IF lnId015000 # 0
*!*									.aGarantia(lnId015000 ,6) = .aGarantia(lnId015000 ,6) + 90 - lnTotNetaMinima
*!*								ELSE
*!*									.aGarantia(lnId016000 ,6) = .aGarantia(lnId016000 ,6) + 90 - lnTotNetaMinima
*!*								ENDIF
*!*							ENDIF
*!*							EXIT
*!*						ENDIF
*!*					ENDFOR

*!*				CASE tcTariTasa = 'N'
*!*					*- Tasa MANUAL
*!*					*- Se respeta lo que ponga
*!*			ENDCASE
	ENDIF
ENDWITH


ENDPROC
PROCEDURE _018_validacion
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC

* Metodo de validacion para el 074 de Caja Madrid , Multiriesgo Comercios


* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos

LOCAL;
	loSituRies, loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp 		= toContenedor.oApEsp
loUsua 		= toContenedor.oUsua
loSitRies	= toContenedor.OSITRIES

loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Especfico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF

LOCAL;
	lnId015000, lnId013000, lnId016004, lnId012000, lnId010000, ;
	lnId016000, lnId023000, lnId018019, lnId163000, lnId164000, ;
	lnId165000, lnId031000, lnId032000, lnId071000, lnId023024, ;
	lnId023025, lnId004000, lnId160000, lnId161000, lnId159000, lnId162000

STORE 0 TO 	;
	lnId015000, lnId013000, lnId016004, lnId012000, lnId010000, ;
	lnId016000, lnId023000, lnId018019, lnId163000, lnId164000, ;
	lnId165000, lnId031000, lnId032000, lnId071000, lnId023024, ;
	lnId023025, lnId004000, lnId160000, lnId161000, lnId159000, lnId162000

*- Llama al procedimiento que trata las clausulas
THIS._018_ClausulasAutomaticas(toContenedor)

WITH loEsp
	FOR i=1 TO ALEN(.aGarantia,1)
		lcTemp	='lnId'+.aGarantia(i,1)
		&lcTemp	= i
	ENDFOR


	*- Validacion del los datos comunes al riesgo
	THIS.val_riesgo(toContenedor,IIF(TYPE('toContenedorC')='O',toContenedorC,''))

	.CrearCursorGarantia()

	*- Nro de garantas contratadas
	SELECT * FROM CurGarantia ;
		WHERE !EMPTY(ra_cover) ;
		INTO CURSOR cTemp
	IF _TALLY=0
		loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
		RETU
	ENDIF

	*- Nro de garantas contratadas
	IF tcTipoTarifa # 'S' && PRIMA DE TARIFA
		SELECT * FROM CurGarantia ;
			WHERE !INLIST(RA_COVER,'163000','162000','159000','161000','160000','165000','018019','023000','012000','013000') AND !EMPTY(RA_COVER) AND (EMPTY(CAPITAL) OR  EMPTY(PRIMA));
			INTO CURSOR cTemp
		IF _TALLY>0
			loError.inser_er("V00240","oEspRiesgo",'Garantas Contratadas, valores no vlidos','','')
			* RETU
		ENDIF
	ENDIF


	*- Validacion de los valores de la cobertura de Accidentes
	SELECT * FROM CurGarantia ;
		WHERE RA_COVER='023000' AND  (!EMPTY(CAPITAL) OR  !EMPTY(PRIMA));
		INTO CURSOR cTemp
	IF _TALLY>0
		loError.inser_er("V00240","oEspRiesgo",'Garanta de Accidente, Capital y Prima deben ser 0','','')
		RETU
	ENDIF


	*- Valida que tenga consorcio si tiene alguna del 015 o 016
	SELECT * FROM CurGarantia ;
		WHERE INLIST(SUBSTR(RA_COVER,1,3),'015','016') ;
		INTO CURSOR cTemp
	IF _TALLY>0
		SELECT * FROM CurGarantia ;
			WHERE RA_COVER='018019' ;
			INTO CURSOR cTemp
		IF 	_TALLY=0
			loError.inser_er("V00240","oEspRiesgo",'Consorcio, Garanta no contratada','','')
		ENDIF
	ENDIF

	*------------------------
	*- Garantas Obligatorias
	*------------------------



	*- Asistencia
	IF lnId012000=0
		loError.inser_er("V00241","oEspRiesgo",'Asistencia - no contratada','','')
	ELSE
		*!*			*- Prima de Asistencia
		*!*			IF .aGarantia(lnId012000,6)=0
		*!*				loError.inser_er("V00240","oEspRiesgo",'Asistencia - la prima no puede ser 0','','')
		*!*			ENDIF
	ENDIF

	*- Defensa Juridica
	IF lnId013000=0
		loError.inser_er("V00240","oEspRiesgo",'Defensa Jurdica - no contratada','','')
	ELSE
		*-Prima de la defensa
		IF .aGarantia(lnId013000,6)=0
			loError.inser_er("V00240","oEspRiesgo",'Defensa Jurdica - la prima no puede ser 0','','')
		ENDIF
	ENDIF


	*- Responsabilidad Civil
	*!*		IF lnId010000=0
	*!*			loError.inser_er("V00240","oEspRiesgo",'Responsabilidad Civil - no contratada','','')
	*!*		ENDIF

	*- Ampliacion de roturas Capitales
	IF lnId165000=0
		loError.inser_er("V00240","oEspRiesgo",'Roturas - no contratada','','')
	ELSE
		DO CASE
			CASE .aGarantia(lnId165000,4) < 601.01
				loError.inser_er("V00240","oEspRiesgo",'Roturas - Capital Inferior al Mnimo 601.01','','')

			CASE .aGarantia(lnId165000,4) > 6010.12
				loError.inser_er("C00021","oEspRiesgo",'Roturas - Capital Superior al Mximo 6010.12','','')

			CASE .aGarantia(lnId165000,4) = 0
				loError.inser_er("V00240","oEspRiesgo",'Roturas - Capital no puede ser 0','','')
		ENDCASE
	ENDIF

	*- Continente o Contenido son obligatorias
	IF lnId016000=0 AND lnId015000=0
		loError.inser_er("V00240","oEspRiesgo",'Ha de seleccionar Daos Continente o Contenido - no contratada','','')
	ELSE
		*- Capital maximo  de contenido
		IF lnId015000#0 AND .aGarantia(lnId015000 , 4) > 300506.05
			loError.inser_er("C00011","oEspRiesgo",'Capital de Contenido > 300506.05','','')
		ENDIF
	ENDIF

	*- Continente a primer riesgo sin Continente
	IF .ContinentePrimerRiesgo = 'S' AND lnId016000 = 0
		loError.inser_er("V00240","oEspRiesgo",'Continente a Primer Riesgo - Continente no contratado','','')
	ENDIF

	*- Continente a primer riesgo y capital
	IF .ContinentePrimerRiesgo = 'S' AND lnId016000 # 0
		IF .aGarantia(lnId016000,4) > 12020.24
			loError.inser_er("C00011","oEspRiesgo",'Contrata mas de 12020.24 de Continente a Primer Riesgo','','')
		ENDIF
	ENDIF

	*- Trabajo Fuero Local
	IF lnId163000 # 0 AND .aGarantia(lnId163000,6) = 0
		loError.inser_er("V00240","oEspRiesgo",'Trabajo Fuera del Local - ha de introducir prima','','')
	ENDIF

	*- Robosin Contenido
	IF lnId004000 # 0 AND LEFT(.Actividad,3)='099'
		loError.inser_er("V00240","oEspRiesgo",'Robo - no puede contratar la garanta con Actividad Genrica','','')
	ENDIF

	*- Robo y Expoliacion sin Contenido
	IF lnId004000 # 0 AND lnId015000 = 0
		loError.inser_er("V00240","oEspRiesgo",'Robo - no se puede contratar sin contenido','','')
	ENDIF

	*- Robo y sin alguna de las hijas
	IF lnId004000 # 0 AND (lnId162000 = 0 OR lnId159000=0 OR lnId161000=0 OR lnId160000=0)
		loError.inser_er("V00240","oEspRiesgo",'Si contrata Robo tiene que dar de alta el resto de las coberturas de Robo Contenido','','')
	ENDIF

	*- Dinero fuera de caja Fuerte
	IF lnId161000#0
		DO CASE
			CASE .aGarantia(lnId161000,4)<300.51
				loError.inser_er("V00240","oEspRiesgo",'Dinero Fuera de Caja Fuerte - el capital es inferiror al mnimo 300.51','','')

			CASE .aGarantia(lnId161000,4)>1202.02
				loError.inser_er("C00021","oEspRiesgo",'Dinero Fuera de Caja Fuerte - el capital supera al mximo 1202.02','','')
		ENDCASE
	ENDIF

	*- Dinero en caja Fuerte
	IF lnId160000#0
		DO CASE
			CASE .aGarantia(lnId160000,4)<1502.52
				loError.inser_er("V00240","oEspRiesgo",'Dinero en Caja Fuerte - el capital es inferior al mnimo 1502.53','','')

			CASE .aGarantia(lnId160000,4)>6010.12
				loError.inser_er("C00021","oEspRiesgo",'Dinero en Caja Fuerte - el capital supera al lmite 6010.12','','')
		ENDCASE
	ENDIF

	*- Transportador de fondos
	IF lnId159000#0
		IF .aGarantia(lnId159000,4) < 601.01
			loError.inser_er("V00240","oEspRiesgo",'Transportador de fondos - el Capital es inferior al mnimo 601.01','','')
		ELSE
			IF .aGarantia(lnId159000,4) > 6010.12
				loError.inser_er("C00021","oEspRiesgo",'Transportador de fondos - el Capital supera el mximo 6010.12','','')
			ENDIF
		ENDIF
	ENDIF

	*- Robo en Escaparate
	IF lnId162000#0
		IF .aGarantia(lnId162000,4) < 601.01
			loError.inser_er("V00240","oEspRiesgo",'Robo en Escaparate - el Capital debe es inferior al mnimo 601.01','','')
		ELSE
			IF .aGarantia(lnId162000,4) > 3005.06
				loError.inser_er("C00021","oEspRiesgo",'Robo en Escaparate - el Capital debe supera el mximo 3005.06','','')
			ENDIF
		ENDIF
	ENDIF

	*- Avera de maquinaria sin Contenido
	IF lnId032000 # 0 AND lnId015000=0
		loError.inser_er("C00011","oEspRiesgo",'Contrata Avera de Maquinaria sin Contenido','','')
	ENDIF

	*- Mercancias en Cmara
	IF lnId071000 # 0 AND lnId032000 = 0
		loError.inser_er("C00011","oEspRiesgo",'No se puede contratar Mercancias en Camara sin Avera de Maquinaria','','')
	ENDIF
	*- Mercancias en Cmara
	IF lnId071000 # 0 AND .aGarantia(lnId071000,4) # 3005.06
		loError.inser_er("V00240","oEspRiesgo",'Mercancias en Cmara, el capital debe ser 3005.06','')		
	ENDIF

	*- Ampliacion de la RC
	IF lnId164000 # 0 AND lnId015000=0 AND lnId016000=0
		loError.inser_er("V00240","oEspRiesgo",'Ampliacin RC - Ha de contratar Daos Continente o Contenido','')
	ENDIF
	IF lnId164000#0 AND .aGarantia(lnId164000,4)#150253.03
		loError.inser_er("V00240","oEspRiesgo",'Ampliacin RC - el Capital debe ser 150253.03','','')
	ENDIF


	*- Averia de Maquinaria y relacin de maquinas
	IF lnId032000#0
		LOCAL ;
			lnSumaCapitalMaquina

		lnSumaCapitalMaquina=0

		FOR i=1 TO ALEN(.aMaquinaria,1)
			lnSumaCapitalMaquina = .aMaquinaria(i,3) + lnSumaCapitalMaquina
		ENDFOR
		IF lnSumaCapitalMaquina = 0
			loError.inser_er("C00011","oEspRiesgo",'Si contrata Avera de Maquinaria ha de relacionar la Maquinaria','','')
		ELSE
			IF 	lnSumaCapitalMaquina # .aGarantia(lnId032000,4)
				loError.inser_er("V00240","oEspRiesgo",'El Capital de Avera de Maquinaria es distinto a la suma de la relacin de maquinaria','','')
			ENDIF
		ENDIF
	ELSE
		LOCAL ;
			lnSumaCapitalMaquina

		lnSumaCapitalMaquina=0
		FOR i=1 TO ALEN(.aMaquinaria,1)
			lnSumaCapitalMaquina = .aMaquinaria(i,3)
		ENDFOR
		IF lnSumaCapitalMaquina # 0
			loError.inser_er("V00240","oEspRiesgo",'Ha relacionado la Maquinaria y no ha contratado la Garanta de Avera de Maquinaria','','')
		ENDIF
	ENDIF


	*- Descripcion de las garantas de Accidente
	IF .AccEmpleado > .Empleados
		loError.inser_er("V00240","oEspRiesgo",'Nmero de Asegurados en Accidentes mayor que el nmero declaro como empleados','','')
	ENDIF
	IF .AccTitular > .Titulares
		loError.inser_er("V00240","oEspRiesgo",'Nmero de Asegurados en Accidentes mayor que el nmero declarado de Titulares','','')
	ENDIF

	*- Total de asegurados de accidente y Relacion de asegurados
	IF  .AccAsegurado # 0
		IF ALEN(.aAsegurado,1)=1
			IF EMPTY(.aAsegurado(1,1)) AND EMPTY(.aAsegurado(1,2))
				loError.inser_er("V00241","oEspRiesgo",'Nmero de Asegurados en la Relacin debe ser igual al total de Asegurados','','')
			ENDIF
		ELSE
			IF .AccAsegurado # ALEN(.aAsegurado,1)
				loError.inser_er("V00241","oEspRiesgo",'Nmero de Asegurados en la Relacin debe ser igual al total de Asegurados','','')
			ENDIF
		ENDIF
	ENDIF


	*- Capital de Maquinaria y Mobiliario y Promedio
	IF lnId015000 # 0
		DO CASE
			CASE .Promedio=0 AND .MaquinariaMobiliario=0
				loError.inser_er("V00240","oEspRiesgo",'Ha de existir Capital de Maquinaria y Mobiliari','','')
			CASE .Promedio#0 AND .MaquinariaMobiliario=0
				loError.inser_er("V00240","oEspRiesgo",'Ha de existir Capital de Maquinaria y Mobiliario','','')
			CASE .Maximo#0 AND .Promedio=0
				loError.inser_er("V00240","oEspRiesgo",'Capital Mximo - Ha de indicar el Promedio de existencias','','')
		ENDCASE

		IF .Promedio#0 AND (.Maximo=0 OR .Promedio > .Maximo)
			loError.inser_er("V00240","oEspRiesgo",'Capital Mximo de existencias erroneo','','')
		ENDIF
		IF .Promedio#0 AND .MaquinariaMobiliario#0 AND (.promedio + .MaquinariaMobiliario) # .aGarantia(lnId015000,4)
			loError.inser_er("V00240","oEspRiesgo",'Capital de Contenido es distinto a la suma de Capital Promedio y Capital de Maquinaria y Mobiliario','','')
		ENDIF
	ENDIF

	*- Imdemnizacion Diaria
	IF lnId031000 # 0 AND lnId015000 = 0
		loError.inser_er("C00011","oEspRiesgo",'Contrata Indemnizacin Diaria por cierre sin Contenido','','')
	ENDIF

	*- Imdemnizacion Diaria y Capital seleccionado
	IF lnId031000 # 0
		IF .CapitalIndemnizacion = 0
			loError.inser_er("V00240","oEspRiesgo",'Ha Contratado la Garanta de Indemnizacin y no ha indicado el Capital diario','','')
		ENDIF

		IF  ROUND(.aGarantia(lnId031000,4) / 90 ,2) #.CapitalIndemnizacion
			loError.inser_er("V00240","oEspRiesgo",'El Capital de Indemnizacin Diaria es distinto del capital indicado en el Detalle de Contratacin','','')
		ENDIF
	ENDIF

	*- Relacion de asegurados para Accidentes e Invalidez
	IF !EMPTY(.AccCapital) OR !EMPTY(.AccAsegurado)
		IF lnId023025 = 0 OR lnId023024 = 0
			loError.inser_er("V00240","oEspRiesgo",'Accidente o Invalidez - No contrato la Garanta','','')
		ENDIF
	ENDIF
	*- Invalidez
	IF lnId023025 # 0
		IF .aGarantia(lnId023025,4) # .AccCapital * .AccAsegurado
			loError.inser_er("V00240","oEspRiesgo",'Invalidez Permanente - el capital es distinto al declarado en la relacion de Asegurados','','')
		ENDIF
	ENDIF

	*- Accidente
	IF lnId023024 # 0
		IF .aGarantia(lnId023024,4) # .AccCapital * .AccAsegurado
			loError.inser_er("V00240","oEspRiesgo",'Fallecimiento Accidental - el capital es distinto al declarado en la relacion de Asegurados','','')
		ENDIF
	ENDIF


	* ROBO CONTINENTE sin Continente
	IF lnId016004#0 AND lnId016000=0
		loError.inser_er("V00240","oEspRiesgo",'Robo Continente  -  Debe contrarse la garanta de Daos Continente','','')
	ENDIF

	* ROBO CONTINENTE y "Robo y Expoliacion	"
	IF lnId016004#0 AND lnId004000 # 0
		loError.inser_er("V00240","oEspRiesgo",'Robo Continente  -  No puede contratar Robo','','')
	ENDIF

	*- Codigo Postal de la Situacin del Riesgo
	IF EMPTY(loSitRies.codposth)
		loError.inser_er("V00240","oEspRiesgo",'Situacin del Riesgo - Cod. Postal vacio','','')
	ENDIF

	*- Actividad
	IF EMPTY(.Actividad)
		loError.inser_er("V00240","oEspRiesgo",'Actividad no Seleccionada','','')
	ENDIF
	IF 	lnId004000 # 0
		if INLIST(LEFT(.Actividad,2),'05','06','07')			
			if LEFT(.Actividad,2)='07'
				loError.inser_er("C00021","oEspRiesgo","Grupo de robo 07",'','')
			else
				loError.inser_er("C00011","oEspRiesgo","Grupo de robo 05,06",'','')
			endif
		endif
	Else
		if INLIST(LEFT(.Actividad,2),'07')		
			loError.inser_er("C00021","oEspRiesgo","Grupo de robo 07",'','')
		endif	
	ENDIF
	IF INLIST(LEFT(.Actividad,3),'099')
		loError.inser_er("C00011","oEspRiesgo","En Riesgo: Cdigo de Actividad Genrico",'','')
	ENDIF


	*- Asistencia de comercios y nro de empleados y nro de titulares
	IF lnId012000#0
		IF EMPTY(.Empleados) AND EMPTY(.Titulares)
			loError.inser_er("V00240","oEspRiesgo",'Asistencia - En Riesgo ha de tener Titulares o Empleados','','')
		ENDIF
	ENDIF

	*- Defensa Juridica y nro de empleados y nro de titulares
	IF lnId013000#0
		IF EMPTY(.Empleados) AND EMPTY(.Titulares)
			loError.inser_er("V00240","oEspRiesgo",'Defensa Juridica - En Riesgo ha de tener Titulares o Empleados','','')
		ENDIF
	ENDIF

	*- Cheks de Tipo de Construccin de los edificios
	IF .EstructuraIncombustible='N' OR .CubiertaIncombustible='N' OR .CerramientoIncombustible='N'
		loError.inser_er("V00241","oEspRiesgo",'En Riesgo: Construccin con materiales combustibles','','')
	ENDIF

	*- Robo en los ultimos 2 aos
	IF .Robo2aos='S' AND .MedidasPosteriores='N'
		loError.inser_er("C00011","oEspRiesgo",'En Riesgo: Ha tenido robos anteriormente y no ha adoptado medidas','','')
	ENDIF

	*- Medidas posteriores sin Robo anteriores
	IF .MedidasPosteriores='S' AND .Robo2aos='N'
		loError.inser_er("V00241","oEspRiesgo",'En Riesgo: Se ha marcado medidas posteriores a Robo sin haber sufrido Robos anteriores','','')
	ENDIF

	*- Campos productos imflamables
	IF .ProductoInflamable='S'
		IF EMPTY(.LiquidoInflamable) AND EMPTY(.GasInflamable)
			loError.inser_er("C00011","oEspRiesgo",'En Riesgo: Existen productos inflamables','','')
		ENDIF
	ENDIF

	*- Extintores
	IF .Extintores='N'
		loError.inser_er("C00011","oEspRiesgo",'En Riesgo: es obligatorio por Ley tener extintores instalados','','')
	ENDIF

	*- PorcentajeCapitalRobo
	*IF lnId004000=0 AND .PorcentajeCapitalRobo#0
	IF lnId004000=0 AND .PorcentajeCapitalRobo#'00'
		loError.inser_er("V00240","oEspRiesgo",'Robo - Ha indicado "Porcentaje de Capital de Robo" y no contrat la garanta','','')
	ENDIF
	IF lnId004000#0 AND .PorcentajeCapitalRobo='00'
		loError.inser_er("V00240","oEspRiesgo","Robo - Ha contratado la garanta y no indic el 'Porcentaje de Capital de Robo'",'','')
	ENDIF

	IF .PorcentajeDescuentoRobo#0
		loError.inser_er("C00011","oEspRiesgo",'Contrata Robo a Valor Parcial','','')
	ENDIF

	*- Capital de reaseguro
	IF .Capireas > 3606072.63
		loError.inser_er("C00021","oEspRiesgo","Capital de Reaseguro supera el mximo'",'','')
	ENDIF

	*- Validaciones de la medidas de proteccion de robo
	IF lnId004000 = 0
		IF 		.SinProteccionOtro='S' 			OR .RejaOtro='S' 		OR .CierreMetalicoOtro='S' 			OR .CierreTubularOtro='S' 			OR .BlindadaOtro='S' 		OR .LunaOtro='S' 		OR;
				.SinProteccionEscaparate='S'	OR .RejaEscaparate='S' 	OR .CierreMetalicoEscaparate='S' 	OR .CierreTubularEscaparate='S' 	OR .BlindadaEscaparate='S' 	OR .LunaEscaparate='S' 	OR;
				.SinProteccionVentana='S' 		OR .RejaVentana='S' 	OR .CierreMetalicoVentana='S' 		OR .CierreTubularVentana='S' 		OR .BlindadaVentana='S' 	OR .LunaVentana='S' 	OR;
				.SinProteccionPuerta='S' 		OR .RejaPuerta='S' 		OR .CierreMetalicoPuerta='S' 		OR .CierreTubularPuerta='S' 		OR .BlindadaPuerta='S' 		OR .LunaPuerta='S'

			loError.inser_er("V00240","oEspRiesgo",'Medidas de Proteccin declararadas sin contratar Robo','','')
		ENDIF
	ELSE
		IF 		.SinProteccionOtro='N' 			AND .RejaOtro='N' 		AND .CierreMetalicoOtro='N' 		AND .CierreTubularOtro='N' 			AND .BlindadaOtro='N' 		AND .LunaOtro='N' 		AND;
				.SinProteccionEscaparate='N'	AND .RejaEscaparate='N' AND .CierreMetalicoEscaparate='N' 	AND .CierreTubularEscaparate='N' 	AND .BlindadaEscaparate='N' AND .LunaEscaparate='N' AND;
				.SinProteccionVentana='N' 		AND .RejaVentana='N' 	AND .CierreMetalicoVentana='N' 		AND .CierreTubularVentana='N' 		AND .BlindadaVentana='N' 	AND .LunaVentana='N' 	AND;
				.SinProteccionPuerta='N' 		AND .RejaPuerta='N' 	AND .CierreMetalicoPuerta='N' 		AND .CierreTubularPuerta='N' 		AND .BlindadaPuerta='N' 	AND .LunaPuerta='N'

			loError.inser_er("V00240","oEspRiesgo",'Medidas de Proteccin sin declarar no se puede contratar Robo','','')
		ENDIF
		IF .BlindadaVentana='S'
			loError.inser_er("C00011","oEspRiesgo",'Medidas de Proteccin erroneas <Puerta Blindada>','','')
		ENDIF
		IF .BlindadaEscaparate='S'
			loError.inser_er("C00011","oEspRiesgo",'Medidas de Proteccin erroneas <Blindada Escaparate>','','')
		ENDIF
		IF .RejaPuerta='S'
			loError.inser_er("C00011","oEspRiesgo",'Medidas de Proteccin erroneas <Reja Puerta>','','')
		ENDIF
		IF .NoExistenPuerta='S'
			loError.inser_er("C00011","oEspRiesgo",'Medidas de Proteccin erroneas <No Existen Puerta>','','')
		ENDIF

		IF .NoExistenVentana='S' AND (.SinProteccionVentana='S' OR .RejaVentana='S' OR .CierreMetalicoVentana='S' OR .CierreTubularVentana='S' OR .BlindadaVentana='S' OR .LunaVentana='S')
			loError.inser_er("C00011","oEspRiesgo",'Ha seleccionado <No Existen Ventanas> - Medidas de Proteccin erroneas','','')
		ENDIF

		IF .NoExistenEscaparate='S' AND (.SinProteccionEscaparate='S' OR .RejaEscaparate='S' OR .CierreMetalicoEscaparate='S' OR .CierreTubularEscaparate='S' OR .BlindadaEscaparate='S' OR .LunaEscaparate='S')
			loError.inser_er("C00011","oEspRiesgo",'Ha seleccionado <No Existe Escaparates> - Medidas de Proteccin erroneas','','')
		ENDIF

		IF .NoExistenOtro='S' AND (.SinProteccionOtro='S' OR .RejaOtro='S' OR .CierreMetalicoOtro='S' OR .CierreTubularOtro='S' OR .BlindadaOtro='S' OR .LunaOtro='S')
			loError.inser_er("C00011","oEspRiesgo",'Ha seleccionado <No Existen Otros Huecos> - Medidas de Proteccin erroneas','','')
		ENDIF

		*- Nivel Minimo de protecciones
		IF .NivelTotal < .NivelMinimo
			loError.inser_er("C00011","oEspRiesgo",'Nivel de protecciones insuficiente para robo','','')
		ENDIF
	ENDIF
	*- Fn niveles de proteccion

	*- Validacion de los ordenes ministeriales Trabajo Fuera del local
	IF .omFlagtfLocal='S' AND .omImptfLocal=0
		loError.inser_er("V00240","oEspRiesgo",'Sobreprima por T.F. del Local - no puede ser 0','','')
	ENDIF
	*- Validacion de los ordenes ministeriales Robo
	IF .omFlagRobo='S'
		IF .omPorRobo=0
			loError.inser_er("V00240","oEspRiesgo",'Sobreprima por T.F. del Local - no puede ser 0','','')
		ELSE
			IF .omPorRobo<0
				loError.inser_er("V00240","oEspRiesgo",'Sobreprima por T.F. del Local - valor no vlido','','')
			ENDIF
		ENDIF
	ENDIF

	*- OBSERVACIONES TECNICAS
	IF !EMPTY(.obsertec)
		loError.inser_er("V00241","oEspRiesgo",'Obervaciones Tcnicas - No se permite consolidar con observaciones tcnicas al riesgo','','')
	ENDIF

	*- Controles de suscripcion segun la actividad
	*- SUBCENTRAL
	IF INLIST(.Actividad,'0104','0107','0216','0991','0992','0993','0994','0995','0996','0997')
		loError.inser_er("C00011","oEspRiesgo",'Actividad selecionada','','')
	ENDIF

	*- CENTRAL
	IF 		INLIST(.Actividad,'0110','0121','0125','0128','0133','0136','0142','0207','0224') ;
		or 	inlist(.actividad,'0225','0226','0231','0233','0236','0239','0244','0246','0249','0254') ;
		or 	inlist(.actividad,'0337','0341','0342','0343','0344','0347','0351','0423','0424','0425') ;
		or 	inlist(.actividad,'0426','0435','0437','0438','0441','0443','0445','0519','0520','0521');
		or 	inlist(.actividad,'0524','0527','0528','0534','0537','0544','0611','0261','0558')			
		loError.inser_er("C00021","oEspRiesgo",'Actividad selecionada','','')
	ENDIF
	
ENDWITH

ENDPROC
PROCEDURE wnpoliza
LPARAMETERS toEsp, tcOperacion
DO CASE
	CASE toEsp.TratEspecial='016' AND !INLIST(tcOperacion,"3","4","5","7","8")
		RETU .T.

	CASE toEsp.TratEspecial='018' AND DATE()>{23/08/2002} AND !INLIST(tcOperacion,"3","4","5","7","8")
		RETU .T.

	OTHERWISE
		RETU .F.
ENDCASE

ENDPROC
PROCEDURE _018_iniciar
LPARAMETERS toContenedor, tcTextoRamo

LOCAL;
	loEsp,  lnFila, lnElemento

lnFila		=0
lnElemento	=0
loEsp =	toContenedor.oApEsp

DIME loEsp.ACLAUSULA(1,ALEN(loEsp.ACLAUSULA,2))

toContenedor.oriesgo.ramoprod = '062'
THIS.IniciarTariTasa(toContenedor)


*- Cargar las garantias por defecto
THIS.CargarGarantiaObligatoria(loEsp)

toContenedor.oApEsp.ModcGral='SG-4046'
ENDPROC
PROCEDURE vcodpostalsituacionriesgo
LPARAMETERS tcValor, tcValorAnterior, toEsp, toUsua
lnRet=0
*- 0 = Todo bien
*- 1 = Inicializar Prima
DO CASE
	CASE toEsp.tratEspecial='018'
		IF tcValor#tcValorAnterior
			lnRet=1
		ENDIF
ENDCASE
return lnRet
ENDPROC
PROCEDURE _018_creararraytarifa
Lparameters toEsp


*- Filas = Grupos de Robo del 1..8

*- Columnas
*- Columnas 1,2 - Menos de 10 Millones de contenido
*- Columnas 3,4 - 10 a 20 Millones de Contenido
*- Columnas 5,6 - 20 a 50 Millones de Contenido
*- Columnas 7,9 - 50 .... Millones de Contenido

*- Columnas 1,3,5,7 son de poblacion tipo X
*- Columnas 2,4,6,8 son de poblacion tipo Y

toEsp.addproperty('aTasa(7,8)','')

If toEsp.NuevaTarifa
	.aTasa(1,1) = 2.55
	.aTasa(1,2) = 1.11
	.aTasa(1,3) = 2.30
	.aTasa(1,4) = 1.20
	.aTasa(1,5) = 2.04
	.aTasa(1,6) = 1.08
	.aTasa(1,7) = 1.77
	.aTasa(1,8) = 0.95
	.aTasa(2,1) = 3.81
	.aTasa(2,2) = 1.85
	.aTasa(2,3) = 3.38
	.aTasa(2,4) = 1.61
	.aTasa(2,5) = 2.94
	.aTasa(2,6) = 1.38
	.aTasa(2,7) = 2.51
	.aTasa(2,8) = 1.16
	.aTasa(3,1) = 5.12
	.aTasa(3,2) = 2.54
	.aTasa(3,3) = 4.56
	.aTasa(3,4) = 2.31
	.aTasa(3,5) = 4.01
	.aTasa(3,6) = 2.07
	.aTasa(3,7) = 3.45
	.aTasa(3,8) = 1.83
	.aTasa(4,1) = 6.44
	.aTasa(4,2) = 3.24
	.aTasa(4,3) = 5.76
	.aTasa(4,4) = 3.00	
	.aTasa(4,5) = 5.07
	.aTasa(4,6) = 2.75
	.aTasa(4,7) = 4.40
	.aTasa(4,8) = 2.51
	.aTasa(5,1) = 11.25
	.aTasa(5,2) = 5.67
	.aTasa(5,3) = 10.07
	.aTasa(5,4) = 5.24
	.aTasa(5,5) = 8.87
	.aTasa(5,6) = 4.82
	.aTasa(5,7) = 7.68
	.aTasa(5,8) = 4.38
	.aTasa(6,1) = 15.00
	.aTasa(6,2) = 5.55
	.aTasa(6,3) = 13.41
	.aTasa(6,4) = 6.99
	.aTasa(6,5) = 11.82
	.aTasa(6,6) = 6.42
	.aTasa(6,7) = 10.23
	.aTasa(6,8) = 5.85
	.aTasa(7,1) = 20.01
	.aTasa(7,2) = 10.07
	.aTasa(7,3) = 17.90
	.aTasa(7,4) = 9.32
	.aTasa(7,5) = 15.77
	.aTasa(7,6) = 8.55
	.aTasa(7,7) = 13.65
	.aTasa(7,8) = 7.80
Else
	.aTasa(1,1) = 1.70
	.aTasa(1,2) = 0.89
	.aTasa(1,3) = 1.53
	.aTasa(1,4) = 0.80
	.aTasa(1,5) = 1.36
	.aTasa(1,6) = 0.72
	.aTasa(1,7) = 1.18
	.aTasa(1,8) = 0.63
	.aTasa(2,1) = 2.54
	.aTasa(2,2) = 1.23
	.aTasa(2,3) = 2.25
	.aTasa(2,4) = 1.07
	.aTasa(2,5) = 1.96
	.aTasa(2,6) = 0.92
	.aTasa(2,7) = 0.17
	.aTasa(2,8) = 0.77
	.aTasa(3,1) = 3.41
	.aTasa(3,2) = 1.69
	.aTasa(3,3) = 3.04
	.aTasa(3,4) = 1.54
	.aTasa(3,5) = 2.67
	.aTasa(3,6) = 1.38
	.aTasa(3,7) = 2.30
	.aTasa(3,8) = 1.22
	.aTasa(4,1) = 4.29
	.aTasa(4,2) = 2.16
	.aTasa(4,3) = 3.84
	.aTasa(4,4) = 2.00
	.aTasa(4,5) = 3.38
	.aTasa(4,6) = 1.83
	.aTasa(4,7) = 2.93
	.aTasa(4,8) = 1.67
	.aTasa(5,1) = 7.50
	.aTasa(5,2) = 3.78
	.aTasa(5,3) = 6.71
	.aTasa(5,4) = 3.49
	.aTasa(5,5) = 5.91
	.aTasa(5,6) = 3.21
	.aTasa(5,7) = 5.12
	.aTasa(5,8) = 2.92
	.aTasa(6,1) = 10.00
	.aTasa(6,2) = 5.03
	.aTasa(6,3) = 8.94
	.aTasa(6,4) = 4.66
	.aTasa(6,5) = 7.88
	.aTasa(6,6) = 4.28
	.aTasa(6,7) = 6.82
	.aTasa(6,8) = 3.90
	.aTasa(7,1) = 13.34
	.aTasa(7,2) = 6.71
	.aTasa(7,3) = 11.93
	.aTasa(7,4) = 6.21
	.aTasa(7,5) = 10.51
	.aTasa(7,6) = 5.70
	.aTasa(7,7) = 9.10
	.aTasa(7,8) = 5.20
Endif

ENDPROC
PROCEDURE _018_calcularprimarobo
*- CALCULO PRIMA DE ROBO Y EXPOLIZACION - 074 Multiriesgo Comercios de Caja Madrid - 018

LPARAMETERS toEsp, tnCapitalContenido, tnGrupoRobo, tcTipoPoblacion

LOCAL;
	lnPrima, lnTasa, lnRet, lnDescProteccion

lnRet=0
lnPrima=0
lnTasa=0
lnDescProteccion=0


*- Crea el array con las tasas
THIS._018_CrearArrayTarifa(toEsp)

*- Verifica que exista el Grupo de Robo
IF tnGrupoRobo>7
	#IF DEBUGMODE
		WAIT WIND 'Grupo de robo erroneo > 7 : '+ALLTRIM(STR(tnGrupoRobo))
	#ENDIF
	RETURN 0
ENDIF

DO CASE
	CASE tnCapitalContenido<=60101.21
		IF tcTipoPoblacion='X'
			lnTasa=.aTasa(tnGrupoRobo,1)
		ELSE
			lnTasa=.aTasa(tnGrupoRobo,2)
		ENDIF

	CASE tnCapitalContenido>60101.21 AND tnCapitalContenido<=120202.42
		IF tcTipoPoblacion='X'
			lnTasa=.aTasa(tnGrupoRobo,3)
		ELSE
			lnTasa=.aTasa(tnGrupoRobo,4)
		ENDIF

	CASE tnCapitalContenido>120202.42 AND tnCapitalContenido<=300506.05
		IF tcTipoPoblacion='X'
			lnTasa=.aTasa(tnGrupoRobo,5)
		ELSE
			lnTasa=.aTasa(tnGrupoRobo,6)
		ENDIF
	CASE tnCapitalContenido>300506.05
		IF tcTipoPoblacion='X'
			lnTasa=.aTasa(tnGrupoRobo,7)
		ELSE
			lnTasa=.aTasa(tnGrupoRobo,8)
		ENDIF
ENDCASE

*- Descuento por MEDIDAS DE PROTECCIN
lnDescProteccion=0
IF INLIST(VAL(toEsp.GrupoRobo),0,6,7)
	lnDescProteccion=0
ELSE
	lnDescProteccion = (toEsp.NivelTotal - toEsp.NivelMinimo) * 10	&& bonificacion cuando se cubren mas que las protecciones mnimas
	IF lnDescProteccion<0
		lnDescProteccion=0
	ENDIF
ENDIF

*- Aplico el descuento en la tasa
lnTasa = lnTasa -  lnTasa * lnDescProteccion / 100

*- Calculo la Prima
lnPrima=tnCapitalContenido * lnTasa/1000

*- Descuento por VALOR PARCIAL
lnPrima = lnPrima - lnPrima * toEsp.PorcentajeDescuentoRobo / 100

RETURN lnPrima

ENDPROC
PROCEDURE lista_update_elimina
LPARAMETERS toContenedor, tnFilaLista
LOCAL;
	loEsp, lnElemento, lnFila

loEsp=toContenedor.oapesp
lnElemento=0
lnFila=0

IF loEsp.TratEspecial='018'
	IF ASCAN(loEsp.aGarantia,'004000')=0
		IF ASCAN(loEsp.aGarantia,'162000') # 0
			lnFila=ASUBSCRIPT(loEsp.aGarantia, ASCAN(loEsp.aGarantia,'162000') ,1)
			IF ADEL(loEsp.aGarantia, lnFila )=1
				DIME loEsp.aGarantia (ALEN(loEsp.aGarantia,1)-1, ALEN(loEsp.aGarantia,2))
			ENDIF
		ENDIF
		IF ASCAN(loEsp.aGarantia,'159000') # 0
			lnFila=ASUBSCRIPT(loEsp.aGarantia, ASCAN(loEsp.aGarantia,'159000') ,1)
			IF ADEL(loEsp.aGarantia, lnFila )=1
				DIME loEsp.aGarantia (ALEN(loEsp.aGarantia,1)-1, ALEN(loEsp.aGarantia,2))
			ENDIF
		ENDIF
	ENDIF
	IF ASCAN(loEsp.aGarantia,'161000') # 0
		lnFila=ASUBSCRIPT(loEsp.aGarantia, ASCAN(loEsp.aGarantia,'161000') ,1)
		IF ADEL(loEsp.aGarantia, lnFila )=1
			DIME loEsp.aGarantia (ALEN(loEsp.aGarantia,1)-1, ALEN(loEsp.aGarantia,2))
		ENDIF
	ENDIF
	IF ASCAN(loEsp.aGarantia,'160000') # 0
		lnFila=ASUBSCRIPT(loEsp.aGarantia, ASCAN(loEsp.aGarantia,'160000') ,1)
		IF ADEL(loEsp.aGarantia, lnFila )=1
			DIME loEsp.aGarantia (ALEN(loEsp.aGarantia,1)-1, ALEN(loEsp.aGarantia,2))
		ENDIF
	ENDIF

ENDIF



ENDPROC
PROCEDURE lista_update_modifica
LPARAMETERS toContenedor, tnFilaLista
LOCAL;
	loEsp, lnElemento, lnFilam, loBusMdv

loEsp=toContenedor.oapesp
lnElemento=0
lnFila=0

*- Tratamiento de las Clausulas de Caja Madrid
THIS.TratarClausulaCaja(loEsp, 'MODIFICACION', tnFilaLista)

*- Calcula algunas primas por defecto
THIS.CalcularPrimasDefecto(loEsp, 'MODIFICACION', tnFilaLista)

DO CASE
	CASE loEsp.TratEspecial='018'
		*- Pone el  capital de 25.000.000 pts a  la Ampliacion del la RC
		lnElemento=ASCAN(loEsp.aGarantia,'164000')
		IF lnElemento#0
			loEsp.aGarantia [ aSubscript(loEsp.aGarantia, lnElemento ,1) , 4 ]= 150253.03
		ENDIF

		*- Pone el  capital de Mercancias en Camara
		lnElemento=ASCAN(loEsp.aGarantia,'071000')
		IF lnElemento#0
			loEsp.aGarantia [ aSubscript(loEsp.aGarantia, lnElemento ,1) , 4 ]= 3005.06
		ENDIF

		*- Robo Continente
		lnElemento=ASCAN(loEsp.aGarantia,'016004')
		IF lnElemento#0
			loEsp.aGarantia [ aSubscript(loEsp.aGarantia, lnElemento ,1) , 4 ]= 3005.06
		ENDIF
		
	OTHERWISE
		*- Nada
ENDCASE

ENDPROC
PROCEDURE lista_update_nuevo
LPARAMETERS toContenedor, tnFilaLista
LOCAL;
	loEsp, lnElemento, lnFilam, loBusMdv

loEsp=toContenedor.oapesp
lnElemento=0
lnFila=0

*- Tratamiento de las Clausulas
THIS.TratarClausulaCaja(loEsp, 'ALTA' , tnFilaLista)

*- Tratamiento especiles
DO CASE
	CASE loEsp.TratEspecial='018'
		IF  ASCAN(loEsp.aGarantia,'004000') # 0
			*- Agrega las garantias de robo y expoliacion
			LOCAL ARRAY laTemp(ALEN(loEsp.aGarantia,1) , ALEN(loEsp.aGarantia,2))
			ACOPY(loEsp.aGarantia , laTemp)
			*- taEsp, tcModalidad, tcRamo, tcCodigo, tnSuma, tnTasa, tnPrima
			THIS.Insertar_garantia( @laTemp, loEsp.Modalidad, .oUsua.Ramo, '162000', 601.01, 0,0)
			THIS.Insertar_garantia( @laTemp, loEsp.Modalidad, .oUsua.Ramo, '159000', 601.01, 0,0)
			THIS.Insertar_garantia( @laTemp, loEsp.Modalidad, .oUsua.Ramo, '161000', 300.51, 0,0)
			THIS.Insertar_garantia( @laTemp, loEsp.Modalidad, .oUsua.Ramo, '160000', 1502.52, 0,0)
			DIME loEsp.aGarantia (ALEN(laTemp,1) , ALEN(laTemp,2))
			ACOPY (laTemp, loEsp.aGarantia)
		ENDIF

		*- Pone el  capital de 25.000.000 pts a  la Ampliacion del la RC
		lnElemento=ASCAN(loEsp.aGarantia,'164000')
		IF lnElemento#0
			loEsp.aGarantia [ aSubscript(loEsp.aGarantia, lnElemento ,1) , 4 ]= 150253.03
		ENDIF

		*- Pone el  capital de Mercancias en Camara
		lnElemento=ASCAN(loEsp.aGarantia,'071000')
		IF lnElemento#0
			loEsp.aGarantia [ aSubscript(loEsp.aGarantia, lnElemento ,1) , 4 ]= 3005.06
		ENDIF

		*- Robo Continente
		lnElemento=ASCAN(loEsp.aGarantia,'016004')
		IF lnElemento#0
			loEsp.aGarantia [ aSubscript(loEsp.aGarantia, lnElemento ,1) , 4 ]= 3005.06
		ENDIF
	
	OTHERWISE
		*- Nada por ahora
ENDCASE

ENDPROC
PROCEDURE _018_calcularnivelproteccion
LPARAMETERS toEsp
LOCAL ;
	lnMaxCol1, lnMaxCol2, lnMaxCol3, lnMaxCol4

LOCAL ARRAY aTemp(6,4)
aTemp=-1
WITH toEsp

	aTemp(1,1) = IIF(.LunaPuerta	='S', 2, -1 )
	aTemp(1,2) = IIF(.LunaVentana	='S', 2, -1 )
	aTemp(1,3) = IIF(.LunaEscaparate='S', 2, -1 )
	aTemp(1,4) = IIF(.LunaOtro		='S', 2, -1 )
	aTemp(2,1) = IIF(.BlindadaPuerta	='S', 3, -1 )
	aTemp(2,2) = IIF(.BlindadaVentana	='S', 3, -1 )
	aTemp(2,3) = IIF(.BlindadaEscaparate='S', 3, -1 )
	aTemp(2,4) = IIF(.BlindadaOtro		='S', 3, -1 )
	aTemp(3,1) = IIF(.CierreTubularPuerta		='S', 2, -1 )
	aTemp(3,2) = IIF(.CierreTubularVentana		='S', 2, -1 )
	aTemp(3,3) = IIF(.CierreTubularEscaparate	='S', 2, -1 )
	aTemp(3,4) = IIF(.CierreTubularOtro			='S', 2, -1 )
	aTemp(4,1) = IIF(.CierreMetalicoPuerta		='S', 3, -1 )
	aTemp(4,2) = IIF(.CierreMetalicoVentana		='S', 3, -1 )
	aTemp(4,3) = IIF(.CierreMetalicoEscaparate	='S', 3, -1 )
	aTemp(4,4) = IIF(.CierreMetalicoOtro		='S', 3, -1 )
	aTemp(5,1) = IIF(.RejaPuerta		='S', 3, -1 )
	aTemp(5,2) = IIF(.RejaVentana		='S', 3, -1 )
	aTemp(5,3) = IIF(.RejaEscaparate	='S', 3, -1 )
	aTemp(5,4) = IIF(.RejaOtro			='S', 3, -1 )
	aTemp(6,1) = IIF(.SinProteccionPuerta		='S', 0, -1 )
	aTemp(6,2) = IIF(.SinProteccionVentana		='S', 0, -1 )
	aTemp(6,3) = IIF(.SinProteccionEscaparate	='S', 0, -1 )
	aTemp(6,4) = IIF(.SinProteccionOtro			='S', 0, -1 )


	lnMaxCol1	=MAX( aTemp(1,1),aTemp(2,1),aTemp(3,1),aTemp(4,1),aTemp(5,1),aTemp(6,1) )	
	lnMaxCol2	=MAX( aTemp(1,2),aTemp(2,2),aTemp(3,2),aTemp(4,2),aTemp(5,2),aTemp(6,2) )
	lnMaxCol3	=MAX( aTemp(1,3),aTemp(2,3),aTemp(3,3),aTemp(4,3),aTemp(5,3),aTemp(6,3) )
	lnMaxCol4	=MAX( aTemp(1,4),aTemp(2,4),aTemp(3,4),aTemp(4,4),aTemp(5,4),aTemp(6,4) )
	

	lnMaxCol1	= iif(lnMaxCol1 < 0, 999, lnMaxCol1)
	lnMaxCol2	= iif(lnMaxCol2 < 0, 999, lnMaxCol2)
	lnMaxCol3	= iif(lnMaxCol3 < 0, 999, lnMaxCol3)
	lnMaxCol4	= iif(lnMaxCol4 < 0, 999, lnMaxCol4)

	lnNivel 	= MIN(lnMaxCol1, lnMaxCol2, lnMaxCol3, lnMaxCol4)

	IF lnNivel = 999
		RETURN 0
	ELSE
		RETURN lnNivel
	ENDIF
ENDWITH


*!*	Local ;
*!*		lnMayor
*!*
*!*	lnMayor = 0

*!*	For i=1 TO 6
*!*		If toEsp.aProtecciones(i,1)
*!*			If toEsp.aProtecciones(i,2) > lnMayor
*!*				lnMayor = toEsp.aProtecciones(i,2)
*!*			Endif
*!*		Endif
*!*	Endfor

*!*	Return lnMayor

ENDPROC
PROCEDURE _018_calcularniveltotal
lparameters toEsp
local;
	lntotal
lnTotal=0	
	
lnTotal = iif(toEsp.AlarmaRobo='S', 3, 0) + iif(toEsp.VigilanciaSeguridad='S', 6, 0) + toEsp.NivelProteccion
IF lnTotal >6
	lnTotal =6
ENDI
return lnTotal



ENDPROC
PROCEDURE verificar_tarificacion
LPARAMETERS toContenedor, toContenedorC
*- Este mtodo esta pensando para tarificar a prima adquirida y  a prima de tarifa
*- Carga un array con las garantias y con el codigo de taritasa (X,S,N) que 
*- corresponda, es decir que cada fila me dir como se debe tarificar esa garanta.  Luego lo 
*- usaremso en el metodo de tarificacion.
*- Por defecto este array se carga con el taritasa seleccionado, y luego se cambiar o no 
*- segn las condiciones que se establezcan


*- aGarantiaTipoTarifa(1,1)=Codigo garantia
*- aGarantiaTipoTarifa(1,2)=TariTasa
*- aGarantiaTipoTarifa(1,3)=Nada aqui
*- aGarantiaTipoTarifa(1,4)=Capital
*- aGarantiaTipoTarifa(1,5)=Tasa
*- aGarantiaTipoTarifa(1,6)=Prima

*- PRIMA TARIFA ACTUAL = 'X'
*- PRIMA ADQUIRIDA = 'S'
*- Tasa MANUAL = 'N'
WITH toContenedor
	LOCAL ;
		loEsp,lnCapitalCartera, lnTasaCartera, lnPrimaCartera

	loEsp 			= .oApEsp
	STORE 0 TO lnCapitalCartera, lnTasaCartera, lnPrimaCartera

	THIS.ADDPROPERTY('TodoPrimaTarifa',.F.)
	THIS.ADDPROPERTY('aGarantiaTipoTarifa(1,6)','')

	DO CASE
		*- Ramos que tienen prima de Adquirida
		CASE INLIST(loEsp.TratEspecial,'018','025')
			*- Suplementos
			IF VARTYPE(toContenedorC)='O'
				*---------------------------------------------------------------------------
				*- Ac deben ir las condiciones que hagan retarificar todo a prima de tarifa
				*---------------------------------------------------------------------------
				DO CASE
					CASE loEsp.TratEspecial='018'
						*- Si se modifica la ACTIVIDAD se calcular toda la operacin a prima de tarifa
						IF loEsp.Actividad  #  toContenedorC.oApEsp.Actividad and toContenedorC.oApEsp.Actividad # '0999'
							THIS.TodoPrimaTarifa = .T.
							.oRiesgo.TariTasa='X'
							RETURN
						ENDIF

					OTHERWISE
						*- Nada
				ENDCASE
				*---------------------------------------------------------------------------


				*- Cargamos el array aGarantiaTipoTarifa
				DIME THIS.aGarantiaTipoTarifa( ALEN(loEsp.aGarantia,1) , ALEN(THIS.aGarantiaTipoTarifa,2))

				FOR i=1 TO ALEN(loEsp.aGarantia,1)
					*- Se carga el array por defecto con el taritasa que selecciono el usuario
					THIS.aGarantiaTipoTarifa(i,1)=loEsp.aGarantia(i,1)
					THIS.aGarantiaTipoTarifa(i,2)=.oRiesgo.TariTasa
					THIS.aGarantiaTipoTarifa(i,3)=''

					*- Verificamos Garantia por garanta como se tiene que tarificar

					*- Verifico si la garnatia es nueva, (no existe en cartera)
					IF ASCAN(toContenedorC.oApEsp.aGarantia, loEsp.aGarantia(i,1))=0
						*- La incorporacin de cualquier garantia nueva se tarificara a prima de tarifa
						THIS.aGarantiaTipoTarifa(i,2)='X'
						THIS.aGarantiaTipoTarifa(i,4)=0
						THIS.aGarantiaTipoTarifa(i,5)=0
						THIS.aGarantiaTipoTarifa(i,6)=0
					ELSE
						lnCapitalCartera = toContenedorC.oApEsp.aGarantia( ASUBSCRIPT(toContenedorC.oApEsp.aGarantia,ASCAN(toContenedorC.oApEsp.aGarantia,loEsp.aGarantia(i,1)),1) ,4)
						lnTasaCartera	 = toContenedorC.oApEsp.aGarantia( ASUBSCRIPT(toContenedorC.oApEsp.aGarantia,ASCAN(toContenedorC.oApEsp.aGarantia,loEsp.aGarantia(i,1)),1) ,5)
						lnPrimaCartera	 = toContenedorC.oApEsp.aGarantia( ASUBSCRIPT(toContenedorC.oApEsp.aGarantia,ASCAN(toContenedorC.oApEsp.aGarantia,loEsp.aGarantia(i,1)),1) ,6)

						THIS.aGarantiaTipoTarifa(i,4)= lnCapitalCartera
						THIS.aGarantiaTipoTarifa(i,5)= lnTasaCartera
						THIS.aGarantiaTipoTarifa(i,6)= lnPrimaCartera
						DO CASE
								*- MULTIRIESGO COMERCIOS
							CASE loEsp.TratEspecial='018'
								this._018_verificar_como_tarificar(toContenedor, toContenedorC, lnCapitalCartera, lnTasaCartera, lnPrimaCartera, i)

								*- Cristales diversos
							CASE loEsp.TratEspecial='025'
								this._025_verificar_como_tarificar(toContenedor, toContenedorC, lnCapitalCartera, lnTasaCartera, lnPrimaCartera, i)

						ENDCASE	&& Case de cada garanta
					ENDIF	&& Verifico si la garnatia es nueva, (no existe en cartera)
				ENDFOR	&& ascan(aGarantia.....
			ELSE
				*- Nueva Produccion
				
				*- Cargo los valores al array TipoTarifa
				DIME THIS.aGarantiaTipoTarifa( ALEN(loEsp.aGarantia,1) , ALEN(THIS.aGarantiaTipoTarifa,2))

				FOR i=1 TO ALEN(loEsp.aGarantia,1)
					THIS.aGarantiaTipoTarifa(i,1)=loEsp.aGarantia(i,1)
					THIS.aGarantiaTipoTarifa(i,2)=.oRiesgo.TariTasa
				ENDFOR
			ENDIF	&& VARTYPE(toContenedorC)='O'
		
		*- Ramos que NO tienen prima de Adquirida
		OTHERWISE
			*- Cargo los valores al array TipoTarifa
			DIME THIS.aGarantiaTipoTarifa( ALEN(loEsp.aGarantia,1) , ALEN(THIS.aGarantiaTipoTarifa,2))

			FOR i=1 TO ALEN(loEsp.aGarantia,1)
				THIS.aGarantiaTipoTarifa(i,1)=loEsp.aGarantia(i,1)
				THIS.aGarantiaTipoTarifa(i,2)=.oRiesgo.TariTasa
			ENDFOR
	ENDCASE

ENDWITH


ENDPROC
PROCEDURE _018_tratarrecepcion
LPARAMETERS toContenedor
LOCAL;
	loEspRiesgo, lnElemento, lnFila

loEspRiesgo=toContenedor.oApEsp

WITH loEspRiesgo
	IF EMPTY(.modcgral)
		.modcgral='SG-4046'
	ENDIF
	
	*- Tratar Nivel Total

*!*		IF .ComercioPlantaBaja='S'
*!*			.aProtecciones(1,1) = IIF(.LunaPuerta = 'S' OR .LunaVentana = 'S' OR .LunaEscaparate= 'S' OR .LunaOtro = 'S',.T.,.F.)
*!*			.aProtecciones(2,1) = IIF(.BlindadaPuerta = 'S' OR .BlindadaVentana = 'S' OR .BlindadaEscaparate= 'S' OR .BlindadaOtro = 'S',.T.,.F.)
*!*			.aProtecciones(3,1) = IIF(.CierreTubularPuerta = 'S' OR .CierreTubularVentana = 'S' OR .CierreTubularEscaparate= 'S' OR .CierreTubularOtro = 'S',.T.,.F.)
*!*			.aProtecciones(4,1) = IIF(.CierreMetalicoPuerta = 'S' OR .CierreMetalicoVentana = 'S' OR .CierreMetalicoEscaparate= 'S' OR .CierreMetalicoOtro = 'S',.T.,.F.)
*!*			.aProtecciones(5,1) = IIF(.RejaPuerta = 'S' OR .RejaVentana = 'S' OR .RejaEscaparate= 'S' OR .RejaOtro = 'S',.T.,.F.)
*!*			.aProtecciones(6,1) = IIF(.SinProteccionPuerta = 'S' OR .SinProteccionVentana = 'S' OR .SinProteccionEscaparate= 'S' OR .SinProteccionOtro = 'S',.T.,.F.)
*!*			*		.aProtecciones(7,1) = IIF(.NoExistenPuerta = 'S' OR .NoExistenVentana = 'S' OR .NoExistenEscaparate= 'S' OR .NoExistenOtro = 'S',.T.,.F.)
*!*		ELSE
*!*			.aProtecciones(1,1) = IIF(.LunaPuerta = 'S' OR .LunaOtro = 'S',.T.,.F.)
*!*			.aProtecciones(2,1) = IIF(.BlindadaPuerta = 'S' OR .BlindadaOtro = 'S',.T.,.F.)
*!*			.aProtecciones(3,1) = IIF(.CierreTubularPuerta = 'S' OR .CierreTubularOtro = 'S',.T.,.F.)
*!*			.aProtecciones(4,1) = IIF(.CierreMetalicoPuerta = 'S' OR .CierreMetalicoOtro = 'S',.T.,.F.)
*!*			.aProtecciones(5,1) = IIF(.RejaPuerta = 'S' OR .RejaOtro = 'S',.T.,.F.)
*!*			.aProtecciones(6,1) = IIF(.SinProteccionPuerta = 'S' OR .SinProteccionOtro = 'S',.T.,.F.)
*!*			*		.aProtecciones(7,1) = IIF(.NoExistenPuerta = 'S' OR .NoExistenOtro = 'S',.T.,.F.)
*!*		ENDIF
*!*		IF .AlarmaRobo='S'
*!*			.aProtecciones(8,1)=.T.
*!*		ELSE
*!*			.aProtecciones(8,1)=.F.
*!*		ENDIF
*!*		IF .VigilanciaSeguridad='S'
*!*			.aProtecciones(9,1)=.T.
*!*		ELSE
*!*			.aProtecciones(9,1)=.F.
*!*		ENDIF

	.NivelProteccion= THIS._018_CalcularNivelProteccion(loEspRiesgo)
	.NivelTotal 	= THIS._018_CalcularNivelTotal(loEspRiesgo)
	*- Fin Tratar Nivel Total



	*- Trata los checks de los ordenes ministeriales
	IF !EMPTY(.omCod1ao)
		.omFlagPrimer=1
	ENDIF

	IF !EMPTY(.omCodRestoAo)
		.omFlagResto=1
	ENDIF

	IF !EMPTY(.omCodSobrePrimaRobo)
		.omFlagRobo='S'
	ENDIF

	IF !EMPTY(.omCodSobrePrimatfLocal)
		.omFlagtfLocal='S'
	ENDIF

	*!*		#IF debugmode
	*!*			IF 6=MESSAGEBOX('DETENER Recepcion ? ',36,'ATENCION')
	*!*				 ******
	*!*			ENDIF
	*!*		#ENDIF

	*- Suma
	.AccAsegurado= .AccEmpleado + .AccTitular

	*- Borra la RC
	lnElemento=ASCAN(.aGarantia,'010000')
	IF lnElemento # 0
		lnFila=ASUBSCRIPT(.aGarantia, lnElemento,1)
		IF 1 = ADEL(.aGarantia, lnFila)
			DIME .aGarantia [ alen(.aGarantia,1)-1 , alen(.aGarantia,2) ]
		ENDIF
	ENDIF

	*- Limpia el porcentaje de capital de robo si no vienen la garantia
	lnElemento=ASCAN(.aGarantia,'004000')
	IF lnElemento = 0
		*.PorcentajeCapitalRobo=0
		.PorcentajeCapitalRobo='00'
	ENDIF

	FOR i=1 TO ALEN(.aGarantia,1)
		*- Recupera el Porcentaje de Capital de Robo
		IF .aGarantia = '004000'

			FOR j=1 TO ALEN(.aPorcentajeRobo,1)
				IF .aPorcentajeRobo(j,2)= .PorcentajeDescuentoRobo
					*.PorcentajeCapitalRobo = .aPorcentajeRobo(j,3)
					.PorcentajeCapitalRobo = .aPorcentajeRobo(j,4)
					EXIT
				ENDIF
			ENDFOR
		ENDIF

		*- Calcula el capital del combo de indemnizacion
		IF .aGarantia(i,1)='031000'
			.CapitalIndemnizacion = ROUND(.aGarantia(i,4) / 90 ,2)
		ENDIF

		*- Pone el capital de accidentes en .AccCapital
		IF INLIST(.aGarantia(i,1),'023024','023025')
			.AccCapital = .aGarantia(i,4)
		ENDIF
	ENDFOR

	*- Ordena el array 
	asort(.aGarantia,7)
	asort(.aGarantiaTodas,7)
	
ENDWITH

ENDPROC
PROCEDURE _util_generar_matriz_obusrecibo
delete file mPrimaNue.TXT
delete file mPrimaAnt.TXT

lcMatriz=_screen.activeform.guidcnt+'.obusrecibo.mPrimaAnt'

lnsuma=0
for i=1 to alen(&lcMatriz,1)
	=STRTOFILE(PADL(ALLTRIM(STR(&lcMatriz[i,3])),3,'0')+PADL(ALLTRIM(STR(&lcMatriz[i,4])),3,'0')+' - '+ALLTRIM(STR(&lcMatriz[i,5],13,2))+CHR(13),'mPrimaAnt.TXT',.T.)
	lnsuma=lnsuma+&lcMatriz[i,5]
endfor
=STRTOFILE('Total '+alltrim(str(lnsuma,10,2))+' - '+lcMatriz,'mPrimaAnt.TXT',.T.)



lcMatriz=_screen.activeform.guidcnt+'.obusrecibo.mprimanue'
lnsuma=0
for i=1 to alen(&lcMatriz,1)
	=STRTOFILE(PADL(ALLTRIM(STR(&lcMatriz[i,3])),3,'0')+PADL(ALLTRIM(STR(&lcMatriz[i,4])),3,'0')+' - '+ALLTRIM(STR(&lcMatriz[i,5],13,2))+CHR(13),'mPrimaNue.TXT',.T.)
	lnsuma=lnsuma+&lcMatriz[i,5]
endfor
=STRTOFILE('Total '+alltrim(str(lnsuma,10,2))+' - '+lcMatriz,'mPrimaNue.TXT',.T.)


ENDPROC
PROCEDURE _018_tratarmprimanue
LPARAMETERS toEsp, taMprimaNue

LOCAL lnTot015, lnTot016, lnCap015, lnCap016, ln010, lcCodDesg015, lcCodDesg016, lcModalidad015, lcModalidad016

STORE 0  TO lnTot015, lnTot016, lnCap015, lnCap016, lnTot010
STORE '' TO lcCodDesg015, lcCodDesg016

FOR i=1 TO ALEN(taMprimaNue,1)
	IF taMprimaNue(i,3)=15
		lnTot015 		= lnTot015 + taMprimaNue(i,5)
		lcCodDesg015 	= taMprimaNue(i,6)
		lnCap015		= taMprimaNue(i,7)
		lcModalidad015	= taMprimaNue(i,2)
	ENDIF

	IF taMprimaNue(i,3)=16
		lnTot016 		= lnTot016 + taMprimaNue(i,5)
		lcCodDesg016 	= taMprimaNue(i,6)
		lnCap016		= taMprimaNue(i,7)
		lcModalidad016	= taMprimaNue(i,2)
	ENDIF

	IF taMprimaNue(i,3)=10
		lnTot010 		= taMprimaNue(i,5)
	ENDIF

ENDFOR

DO CASE
		*- Tiene Contenido y Continente - divido la prima de RC en las 2
	CASE lnTot015  # 0 AND lnTot016 # 0
		lnTot015=lnTot015+ lnTot010 /2
		lnTot016=lnTot016+ lnTot010 /2

		*- Tiene solo Contenido - le sumo la prima de RC
	CASE lnTot015 # 0 AND lnTot016 = 0
		lnTot015=lnTot015+ lnTot010

		*- Tiene solo Continente - le sumo la prima de RC
	CASE lnTot016 # 0  AND lnTot015 = 0
		lnTot016=lnTot016+ lnTot010
ENDCASE

*- Ahora hay q borrar las garantias hijas, la RC (010000)
LOCAL ARRAY laNuevo( 1 , ALEN (taMprimaNue,2))

FOR i = 1 TO ALEN (taMprimaNue,1)
	IF ! INLIST( taMprimaNue(i,3) , 15, 16, 10)
		oLibreria.Array_insertar_Copiar (@taMprimaNue, @laNuevo , i)
	ENDIF
ENDFOR

LOCAL lnNew

IF !EMPTY(lnTot015)
	lnNew = ALEN(laNuevo ,1) + 1
	DIME laNuevo  (lnNew , ALEN(laNuevo ,2))
	laNuevo ( lnNew,1) = '073'
	laNuevo ( lnNew,2) = lcModalidad015
	laNuevo ( lnNew,3) = 15
	laNuevo ( lnNew,4) = 0
	laNuevo ( lnNew,5) = lnTot015
	laNuevo ( lnNew,6) = lcCodDesg015
	laNuevo ( lnNew,7) = lnCap015
ENDIF

IF !EMPTY(lnTot016)
	lnNew = ALEN(laNuevo ,1) + 1
	DIME laNuevo  (lnNew , ALEN(laNuevo ,2))
	laNuevo ( lnNew,1) = '073'
	laNuevo ( lnNew,2) = lcModalidad016
	laNuevo ( lnNew,3) = 16
	laNuevo ( lnNew,4) = 0
	laNuevo ( lnNew,5) = lnTot016
	laNuevo ( lnNew,6) = lcCodDesg016
	laNuevo ( lnNew,7) = lnCap016
ENDIF

DIME taMprimaNue ( ALEN(laNuevo,1) , ALEN(laNuevo,2) )
ACOPY ( laNuevo, taMprimaNue )




*---- Ahora hay que componer aGarantia porq borre la RC
LOCAL ;
	lnId016000, lnId016000, lnId015000, lnId010000

STORE 0 TO lnId016000, lnId016000, lnId015000, lnId010000

*- Recupero las filas donde estan las garantias padres
FOR i = 1 TO ALEN( toEsp.aGarantia , 1 )
	DO CASE
		CASE toEsp.aGarantia(i,1) = '016000'
			lnId016000 = i
		CASE toEsp.aGarantia(i,1) = '015000'
			lnId015000 = i
		CASE toEsp.aGarantia(i,1) = '010000'
			lnId010000 = i
	ENDCASE
ENDFOR

*- Sumo la prima de RC en las Garantias de Continente y Contenido
IF lnId010000  # 0
	DO CASE
			*- Tiene Contenido y Continente - divido la prima de RC en las 2
		CASE lnId016000 # 0 AND lnId015000 # 0 AND toEsp.aGarantia( lnId015000 , 4 ) > 0	 AND toEsp.aGarantia( lnId016000 , 4 ) > 0
			toEsp.aGarantia( lnId015000 , 6 ) = toEsp.aGarantia( lnId015000 , 6 ) + toEsp.aGarantia( lnId010000 , 6 ) /2 	&& 4.51 	&& 
			toEsp.aGarantia( lnId016000 , 6 ) = toEsp.aGarantia( lnId016000 , 6 ) + toEsp.aGarantia( lnId010000 , 6 ) /2 	&& 4.51 	&& 

			*- Tiene solo Contenido - le sumo la prima de RC
		CASE lnId016000 = 0 AND lnId015000 # 0 AND toEsp.aGarantia( lnId015000 , 4 ) > 0
			toEsp.aGarantia( lnId015000 , 6 ) = toEsp.aGarantia( lnId015000 , 6 ) + toEsp.aGarantia( lnId010000 , 6 ) 	&& 9.02 

			*- Tiene solo Continente - le sumo la prima de RC
		CASE lnId016000 # 0 AND lnId015000 = 0 AND toEsp.aGarantia( lnId016000 , 4 ) > 0
			toEsp.aGarantia( lnId016000 , 6 ) = toEsp.aGarantia( lnId016000 , 6 ) + toEsp.aGarantia( lnId010000 , 6 ) 	&& 9.02 
	ENDCASE
	FOR i = 1 TO ALEN (toEsp.aGarantiaTodas,1)
		IF toEsp.aGarantiaTodas(i,1) = '010000'
			IF 1 = ADEL(toEsp.aGarantiaTodas,i)
				DIME toEsp.aGarantiaTodas[alen(toEsp.aGarantiaTodas,1)-1 , alen(toEsp.aGarantiaTodas,2)]
				exit
			ENDIF
		ENDIF
	ENDFOR
	
	IF 1 = ADEL(toEsp.aGarantia,lnId010000)
		DIME toEsp.aGarantia [alen(toEsp.aGarantia,1)-1 , alen(toEsp.aGarantia,2)]
	ENDIF
ENDIF




ENDPROC
PROCEDURE _018_clausulasautomaticas
LPARAMETERS toContenedor
PRIVATE;
	poEsp

LOCAL ;
	lcCodCla

lcCodCLa=''
poEsp=toContenedor.oApESp

IF poEsp.AlarmaRobo='N'
	THIS.abmClausula(poEsp,'BAJA','30','074','CAJ','901')
ELSE
	THIS.abmClausula(poEsp,'ALTA','30','074','CAJ','901')
ENDIF

IF EMPTY(poEsp.entidad) AND EMPTY(poEsp.referencia)
	THIS.abmClausula(poEsp,'BAJA','30','074','CAJ','112')
ELSE
	THIS.abmClausula(poEsp,'ALTA','30','074','CAJ','112')
ENDIF

IF poEsp.VigilanciaSeguridad='N'
	THIS.abmClausula(poEsp,'BAJA','30','074','CAJ','902')
ELSE
	THIS.abmClausula(poEsp,'ALTA','30','074','CAJ','902')
ENDIF

*- Clausula 903 - CUANDO SE CONTRATE LA GARANTIA DE DAOS ROBO AL CONTIENENTE
IF ASCAN(poEsp.aGarantia,'004000') = 0
	THIS.abmClausula(poEsp,'BAJA','30','074','CAJ','903')
ELSE
	*- MODALIDAD DE SEGURO A VALOR PARCIAL EN LA GARANTA DE ROBO
	*IF poEsp.PorcentajeCapitalRobo#100 or poEsp.PorcentajeCapitalRobo#0
	IF poEsp.PorcentajeCapitalRobo='07' OR poEsp.PorcentajeCapitalRobo='00'
		THIS.abmClausula(poEsp,'BAJA','30','074','CAJ','903')
	ELSE
		THIS.abmClausula(poEsp,'ALTA','30','074','CAJ','903')
	ENDIF
ENDIF




*- USUARIO DE LOCALES EN RGIMEN DE ALQUILER"
IF poEsp.Titularidad#'2'
	THIS.abmClausula(poEsp,'BAJA','30','074','CAJ','906')
ELSE
	THIS.abmClausula(poEsp,'ALTA','30','074','CAJ','906')
ENDIF


*- Clausulas realacionadas a la actividad
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'907')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'908')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'909')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'910')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'912')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'913')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'914')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'914')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'916')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'917')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'918')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'919')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'920')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'921')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'922')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'923')
oLibreria.Array_BuscaryEliminarFila("poEsp.aClausula", 1,'924')


lcCodCLa=''
DO CASE
	CASE poEsp.Actividad='0404'
		lcCodCla='907'
	CASE poEsp.Actividad='0305'
		lcCodCla='908'
	CASE poEsp.Actividad='0409'
		lcCodCla='909'
	CASE poEsp.Actividad='0308'
		lcCodCla='910'
	CASE poEsp.Actividad='0428'
		lcCodCla='912'
	CASE poEsp.Actividad='0429'
		lcCodCla='912'
	CASE poEsp.Actividad='0309'
		lcCodCla='913'
	CASE poEsp.Actividad='0111'
		lcCodCla='914'
	CASE poEsp.Actividad='0411'
		lcCodCla='915'
	CASE poEsp.Actividad='0209'
		lcCodCla='916'
	CASE poEsp.Actividad='0314'
		lcCodCla='917'
	CASE poEsp.Actividad='0315'
		lcCodCla='918'
	CASE poEsp.Actividad='0317'
		lcCodCla='919'
	CASE poEsp.Actividad='0218'
		lcCodCla='920'
	CASE poEsp.Actividad='0131'
		lcCodCla='921'
	CASE poEsp.Actividad='0125'
		lcCodCla='922'
	CASE poEsp.Actividad='0136'
		lcCodCla='923'
	CASE INLIST(poEsp.Actividad,'0423','0424','0425')
		lcCodCla='924'
ENDCASE
IF !EMPTY(lcCodCLa)
	THIS.abmClausula(poEsp,'ALTA','30','074','CAJ',lcCodCla)
ENDIF

*- CLAUSULA 905 - CUANDO SE CONTRATE R.C. FUERA DEL LOCAL.
IF ASCAN(poEsp.aGarantia,'163000') = 0
	THIS.abmClausula(poEsp,'BAJA','30','074','CAJ','905')
ELSE
	THIS.abmClausula(poEsp,'ALTA','30','074','CAJ','905')
ENDIF


ENDPROC
PROCEDURE obtener_prima_neta_anterior
LPARAMETERS toBusRecibo
*- Recorre la matriz mPrimaAnt y suma las primas netas
lnTotalNeta = 0
WITH toBusRecibo
	IF NOT EMPTY(.MprimaAnt)
		FOR i=1 TO ALEN (.MprimaAnt, 1)
			lnTotalNeta = lnTotalNeta + .MprimaAnt[i,5]
*!*				.MResult[i,1]=.MprimaAnt[i,1] &&ramo
*!*				.MResult[i,2]=.MprimaAnt[i,2] &&moda
*!*				.MResult[i,3]=.MprimaAnt[i,3] &&cob
*!*				.MResult[i,4]=.MprimaAnt[i,4] &&gara
*!*				.MResult[i,5]=.MprimaAnt[i,6] &&coddesg.
*!*				.MResult[i,6]=.MprimaAnt[i,5] &&prima neta ant.
*!*				.MResult[i,7]=0					&&prima neta Nue.
*!*				.MResult[i,17]=PADL(ALLTR(STR(.MResult[i,3])),3,'0')+PADL(ALLTR(STR(.MResult[i,4])),3,'0')
*!*				.MResult[i,18]=.MprimaAnt[i,7]
		ENDFOR
	ENDIF
ENDWITH
return lnTotalNeta 
ENDPROC
PROCEDURE _024_validacion
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC
LOCAL loError, loEsp


WITH toContenedor
	loError	=.oError
	loEsp	= .oApEsp

	*- Validacion del los datos comunes al riesgo
	THIS.val_riesgo(toContenedor,IIF(TYPE('toContenedorC')='O',toContenedorC,''))

	*- tIPO Y PORCENTAJE DE RAVALORIZACION
	IF toContenedor.oRiesgo.tiporeval # "02"
		loError.inser_er("V00240","oRiesgo",'Tipo de Revalorizacin','','')
	ELSE
		IF toContenedor.oRiesgo.PORCNUEREVAL # 10
			loError.inser_er("V00240","oRiesgo",'Porcentaje de Revalorizacin debe ser 10','','')
		ENDIF
	ENDIF

	*- Capital de Cristales
	IF .oApEsp.aGarantia [ aSubScript(.oApEsp.aGarantia, aScan(.oApEsp.aGarantia,'003000') , 1) , 4] = 0
		loError.inser_er("V00240","oEspRiesgo",'Capital asegurado, no puede ser 0','','')
	ENDIF

	*- Tipo de Vehiculo
	IF loEsp.TipoVehiculo#'1' AND loEsp.TipoVehiculo#'2'
		loError.inser_er("V00240","oEspRiesgo",'Tipo de Vehculo no seleccionado','','')
	ENDIF

	*- Duracin del Riesgo
	IF .oriesgo.duraries='06'
		loError.inser_er("V00240","oEspRiesgo",'Duracin temporal no permitida','','')
	ENDIF

	*- Poliza
	IF EMPTY(loEsp.Poliza)
		loError.inser_er("V00241","oEspRiesgo",'Referencia Pliza','','')
	ENDIF

	*- Marca
	IF EMPTY(loEsp.Marca)
		loError.inser_er("V00241","oEspRiesgo",'Marca Vehculo','','')
	ENDIF

	*- Modelo
	IF EMPTY(loEsp.Modelo)
		loError.inser_er("V00241","oEspRiesgo",'Modelo','','')
	ENDIF

	*- Matricula
	IF EMPTY(loEsp.Matricula)
		loError.inser_er("V00241","oEspRiesgo",'Matrcula','','')
	ENDIF

	*- Franquicia
	IF INLIST(.oUsua.TipOperacion,'1','2','6')
		IF !EMPTY(loEsp.Franquicia)
			loError.inser_er("C00011","oEspRiesgo",'Franquicia','','')
		ENDIF
	ELSE
		IF toContenedorC.oApEsp.Franquicia # loEsp.Franquicia
			loError.inser_er("C00011","oEspRiesgo",'Franquicia','','')
		ENDIF
	ENDIF

*!*		*- Capital de Reaseguro
*!*		IF loEsp.capireas<0
*!*			loError.inser_er("V00241","capireas",'Capital de Reaseguro no puede ser 0','','')
*!*		ENDIF
ENDWITH


ENDPROC
PROCEDURE habilitarmodcgral
LPARAMETERS toContenedor

WITH toContenedor
	DO CASE
		CASE .oApEsp.ModalProd='0230'  AND .oUsua.TipOperacion='1'
			retu .f.
		CASE .oApEsp.TratEspecial='024'  AND .oUsua.TipOperacion='1'
				retu .f.
		CASE inlist(.oApEsp.TratEspecial,'026') AND .oUsua.TipOperacion<>'1'
			retu .f.		
		OTHERWISE
			RETUR .T.
	ENDCASE
ENDWITH

ENDPROC
PROCEDURE autocalcular
*- Aqu se calcula la relacin entre el capital, la tasa y la prima
LPARAMETERS tnSuma, TnTasa, TnPrima, tcControl, toEsp, tcIdGarantia
LOCAL;
	llSuma, llTasa, llPrima

llSuma = !EMPTY(tnSuma)
llTasa = !EMPTY(TnTasa)
llPrima= !EMPTY(TnPrima)


DO CASE
	CASE toEsp.TratEspecial='822'  
		*- Hipotca protegida
		*- No debe calcular nada
		RETU
	CASE inlist(toEsp.TratEspecial,'024','025')
		this.AutoCalcular_TasaReal(@tnSuma, @TnTasa, @TnPrima, tcControl, toEsp, tcIdGarantia)
	
	CASE toEsp.TratEspecial='016'
		*- Tiene preponderacia el Capital y la Tasa
		DO CASE
			CASE  tcControl='Suma'
				IF tnSuma < tnPrima
					tnPrima	= 0
					tnTasa 	= 0
				ENDIF
				IF tnSuma != 0
					DO CASE
						CASE llSuma AND llTasa   &&(Tenga o no Prima no importa, tiene preponderancia la Tasa)
							*TnTasa = (TnPrima / tnSuma) * 1000
							TnPrima = tnSuma * TnTasa/1000

						CASE llSuma AND !llTasa AND llPrima
							TnTasa = (TnPrima / tnSuma) * 1000
							*TnPrima = tnSuma * TnTasa/1000

						CASE !llSuma AND llTasa AND llPrima
							*- Nada
					ENDCASE
				ELSE
					TnTasa = 0
				ENDIF

			CASE  tcControl='Tasa'
				DO CASE
					CASE !llSuma AND llTasa AND llPrima
						*- Nada
					CASE llSuma AND llTasa
						TnPrima = tnSuma * TnTasa/1000

					CASE llSuma AND !llTasa AND llPrima
						TnTasa = (TnPrima / tnSuma) * 1000

					CASE llSuma AND !llTasa AND !llPrima
						*- Nada

					CASE !llSuma AND !llTasa AND llPrima
						*- Nada
				ENDCASE
			CASE tcControl='Prima'
				IF tnPrima > tnSuma AND tnSuma # 0
					tnSuma  = 0
					tnTasa  = 0
				ELSE
					DO CASE
						CASE llSuma AND llTasa
							TnPrima = tnSuma * TnTasa/1000

						CASE !llSuma AND llTasa AND llPrima
							*- Nada

						CASE !llSuma AND llTasa AND !llPrima
							TnTasa = 0

						CASE llSuma AND llPrima AND !llTasa
							TnTasa = (TnPrima / tnSuma) * 1000

						CASE llSuma AND !llTasa AND !llPrima
							*- Nada

						CASE !llSuma AND !llTasa AND llPrima
							*- Nada
					ENDCASE
				ENDIF
		ENDCASE

	OTHERWISE
		*- Tiene preponderacia la Prima y el Capital
		DO CASE
			CASE  tcControl='Suma'
				IF tnSuma < tnPrima
					tnPrima	= 0
					tnTasa 	= 0
				ENDIF
				IF tnSuma != 0
					DO CASE
						CASE llSuma AND llPrima   &&(Tenga o no Tasa no importa, tiene preponderancia la Prima)
							TnTasa = (TnPrima / tnSuma) * 1000

						CASE llSuma AND llTasa AND !llPrima
							TnPrima = tnSuma * TnTasa/1000

						CASE !llSuma AND llTasa AND llPrima
							*- Nada
					ENDCASE
				ELSE
					TnTasa = 0
				ENDIF

			CASE  tcControl='Tasa'
				DO CASE
					CASE !llSuma AND llTasa AND llPrima
						*- Nada
					CASE llSuma AND llTasa
						TnPrima = tnSuma * TnTasa/1000

					CASE llSuma AND !llTasa AND llPrima
						TnTasa = (TnPrima / tnSuma) * 1000

					CASE llSuma AND !llTasa AND !llPrima
						*- Nada

					CASE !llSuma AND !llTasa AND llPrima
						*- Nada
				ENDCASE
			CASE tcControl='Prima'
				IF tnPrima > tnSuma AND tnSuma # 0
					tnSuma  = 0
					tnTasa  = 0
				ELSE
					DO CASE
						CASE !llSuma AND llTasa AND llPrima
							*- Nada
						CASE !llSuma AND llTasa AND !llPrima
							TnTasa = 0
						CASE llSuma AND llPrima
							TnTasa = (TnPrima / tnSuma) * 1000

						CASE llSuma AND !llTasa AND !llPrima
							*- Nada

						CASE !llSuma AND !llTasa AND llPrima
							*- Nada
					ENDCASE
				ENDIF
		ENDCASE
ENDCASE
tnTasa=ROUND(tnTasa,4)

*- Pone la  Tasa de Consorcio en 0 para el 018
IF toEsp.TratEspecial='018' AND tcIdGarantia='018019'
	tnTasa=0
ENDIF

return 



ENDPROC
PROCEDURE wcapital
lparameters toEsp
*- permite o no acceder al control
retu .t.



ENDPROC
PROCEDURE wtasa
LPARAMETERS toEsp
*- permite o no acceder al control
DO CASE
	CASE toEsp.TratEspecial='024'
		RETU .F.
	OTHERWISE

		RETU .T.
ENDCASE

ENDPROC
PROCEDURE wprima
lparameters toEsp
*- permite o no acceder al control
retu .t.

ENDPROC
PROCEDURE lista_veliminar
LPARAMETERS toEsp, tnFila
WITH toEsp
	DO CASE
		CASE INLIST(.TratEspecial,'001','002','012')	&& Caja Madrid y Finisterre
			IF .aGarantia(tnfila,1)='016000' AND .omCobContinente='S'
				.omCobContinente 		='N'
				.omCodsobrePrimaConti	=''
				.omImpCobContinente		= 0.00
			ENDIF

			IF .aGarantia(tnfila,1)='015000' AND .omCobContinente='S'
				.omCobContenido 		='N'
				.omCodSobrePrimaConte	=''
				.omImpCobContenido 		= 0.00
			ENDIF

			*- Tratamiento de las Clausulas de Caja Madrid
			IF .TratEspecial='001'
				THIS.TratarClausulaCaja(toEsp, 'BAJA', tnfila )
			ENDIF

*!*				*- Hipotecario de Caja Madrid
*!*			CASE .TratEspecial='016'
*!*				RETU .F.

			*- Multiriesgo Caja Madrid 074
		CASE .TratEspecial='018'
			IF .aGarantia(tnfila,3)='1'
				RETU .F.
			ELSE
				*- Esta robo y expoliacion he intenta borrar una que depende de esta garantia
				IF INLIST(.aGarantia(tnfila,1),'162000','159000','161000','160000') AND ASCAN(.aGarantia,'004000')#0
					RETU .F.
				ELSE
					RETU .T.
				ENDIF
			ENDIF

			*!*			*- Cristales autos
			*!*			CASE .TratEspecial='024'
			*!*				RETU .F.

			*!*			*- Cristales diversos
			*!*			CASE .TratEspecial='025'
			*!*				IF .aGarantia(tnfila,3)='1'
			*!*					RETU .F.
			*!*				ELSE
			*!*					RETU .T.
			*!*				ENDIF


		OTHERWISE
			*- Verifica la obligatoriedad
			return .aGarantia(tnfila,3) # '1'

	ENDCASE
ENDWITH

ENDPROC
PROCEDURE lista_vnuevo
LPARAMETERS toEsp, tnFila
WITH toEsp
	DO CASE
		CASE .TratEspecial='024' && Cristales Autos
			RETU .F.
		
		OTHERWISE
			RETU .T.
	ENDCASE
ENDWITH

ENDPROC
PROCEDURE _024_tarificar
LPARAMETERS toEsp, tcTipOperacion, tcTariTasa
*- CRISTALES AUTOS               

*- Mtodo de tarificacion a prima de Tarifa para el ramo 074 (Multiriesgo comercios de caja)
LOCAL ;
	lcTemp, lcTemp2, lnTasa, lnPrima, lnTemp, lnTemp2, lnPorcentajeRobo, lnTotNetaMinima, lnPrimaNetaC

STORE '' TO lcTemp, lcTemp2
STORE 0  TO lnTasa, lnPrima, lnTemp, lnTemp2, lnPorcentajeRobo, lnTotNetaMinima, lnPrimaNetaC

LOCAL;
	lnId018019, lnId003000

STORE 0 TO 	;
	lnId018019, lnId003000

WITH toEsp
	*- Recupera las posiciones de las Garantias
	FOR i=1 TO ALEN(.aGarantia,1)
		lcTemp	='lnId'+.aGarantia(i,1)
		&lcTemp	= i
	ENDFOR

	*- PRIMA TARIFA ACTUAL = 'X'
	*- PRIMA ADQUIRIDA = 'S'
	*- Tasa MANUAL = 'N'

	*- Cristales 003000
	IF lnId003000 # 0

		.PrimaTurismo  = .aCapitales [ aSubScript(.aCapitales , aScan(.aCapitales ,.aGarantia(lnId003000,4) ) , 1) , 2]
		.PrimaFurgoneta= .aCapitales [ aSubScript(.aCapitales , aScan(.aCapitales ,.aGarantia(lnId003000,4) ) , 1) , 3]


		IF tcTariTasa = 'X'
			IF .TipoVehiculo='1'
				*- Turismo
				.aGarantia(lnId003000 ,6 )= .PrimaTurismo

			ELSE
				*- Furgoneta
				.aGarantia(lnId003000 ,6 )= .PrimaFurgoneta
			ENDIF
		ELSE
			*- Por Tasa
			IF .TipoVehiculo='1'
				*- Turismo
				IF .aGarantia(lnId003000 ,6 ) < .PrimaTurismo
					.aGarantia(lnId003000 ,6 ) = .PrimaTurismo
				ENDIF
			ELSE
				*- Furgoneta
				IF .aGarantia(lnId003000 ,6 ) < .PrimaFurgoneta
					.aGarantia(lnId003000 ,6 )= .PrimaFurgoneta
				ENDIF
			ENDIF
		ENDIF
		*.aGarantia(lnId003000 ,5 )= .aGarantia(lnId003000 ,6 ) / .aGarantia(lnId003000 ,4 ) * 1000
		.aGarantia(lnId003000 ,5 )= .aGarantia(lnId003000 ,6 ) / .aGarantia(lnId003000 ,4 ) 
	ENDIF

	*-Consorcio
	IF lnId018019#0
		.aGarantia(lnId018019 ,4 ) = 0
		.aGarantia(lnId018019 ,5 ) = 0
		.aGarantia(lnId018019 ,6 ) = 5.41
	ENDIF

	*- Capital de Reaseguro
	*- contenido+ cte + robo + acc + inva + averia maq
	.capireas = .aGarantia(lnId003000 ,4 )


	*- Prima Minima
	lnTotNetaMinima=0

	FOR I=1 TO ALEN(.aGarantia,1)
		IF .aGarantia(i,1) # '018019'
			lnTotNetaMinima = lnTotNetaMinima + .aGarantia(i,6)
		ENDIF
	ENDFOR
ENDWITH


ENDPROC
PROCEDURE tienesesionderecho
LPARAMETERS toEsp
DO CASE
	CASE inlist(toEsp.TratEspecial,'024','025')
		RETU .F.
	OTHERWISE
		RETU .T.
ENDCASE

ENDPROC
PROCEDURE _025_validacion
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC
LOCAL loError, loEsp

WITH toContenedor
	loError	= .oError
	loEsp	= .oApEsp

	FOR i=1 TO ALEN(loEsp.aGarantia,1)
		*- Recupera las posiciones de las Garantias
		lcTemp	='lnId'+loEsp.aGarantia(i,1)
		LOCAL;
			&lcTemp
		&lcTemp	= i
	ENDFOR


	*- Validacion del los datos comunes al riesgo
	THIS.val_riesgo(toContenedor,IIF(TYPE('toContenedorC')='O',toContenedorC,''))

	*- Verifica que exista al menos  una de las tres
	IF VARTYPE(lnId003243)='U' AND VARTYPE(lnId003244)='U' AND VARTYPE(lnId003245)='U'
		loError.inser_er("V00240","oEspRiesgo",'Garantas contratadas','','')
	ENDIF

	*- Porcentaje de consorcio
	IF EMPTY(loEsp.PorcenCons)
		loError.inser_er("V00240","oEspRiesgo",'Porcentaje de Consorcio, no puede ser 0','','')
	ELSE
		loEsp.aGarantia [ aSubScript(loEsp.aGarantia, aScan(loEsp.aGarantia,'018019') , 1) , 5] = loEsp.PorcenCons
	ENDIF
	IF INLIST(.oUsua.tipOperacion,'1','2','6')
		*- Nueva Produccin
		IF loEsp.aGarantia [ aSubScript(loEsp.aGarantia, aScan(loEsp.aGarantia,'018019') , 1) , 5] # 0
			loError.inser_er("C00011","oEspRiesgo",'Porcentaje de Consorcio','','')
		ENDIF
	ELSE
		*- Suplemento
		*- Cambio el porcentaje de consorcio

		IF VARTYPE(toContenedorC)='O' AND loEsp.aGarantia [ aSubScript(loEsp.aGarantia, aScan(loEsp.aGarantia,'018019') , 1) , 5] # loEsp.oldTasaConsorcio
			loError.inser_er("C00011","oEspRiesgo",'Porcentaje de Consorcio','','')
		ENDIF
	ENDIF


	*- Tarificacin por Tasa
	IF  toContenedor.oRiesgo.TariTasa='N'
		loError.inser_er("C00021","oEspRiesgo",'Emisin por Tasa','','')
	ENDIF


	*!*		*- Capital de Reaseguro
	*!*		if loEsp.capireas<=0
	*!*			loError.inser_er("V00241","capireas",'Capital de Reaseguro no puede ser 0','','')
	*!*		endif
ENDWITH


ENDPROC
PROCEDURE lista_vaceptar
LPARAMETERS toEsp, tnBoton, tnFila, tnGarantia_a_ingresar
LOCAL;
	lnLibre
lnLibre=0

*- Valida q haya seleccionado una garanta
IF EMPTY(tnGarantia_a_ingresar)
	RETU .F.
ENDIF
*- tnboton: 1=nuevo    2=Modificar   3=eliminar
DO CASE
		*- Cristales Diversos
	CASE tnBoton=1
		IF SUBSTR(tnGarantia_a_ingresar,1,3) = '999'
			*- Cuenta el nro de libres
			FOR i=1 TO ALEN(toEsp.aGarantia,1)
				IF SUBSTR(toEsp.aGarantia(i,1),1,3) ='999'
					lnLibre=lnLibre+1
				ENDIF
			ENDFOR
			IF lnLibre => toEsp.NumeroLibres
				RETU .F.
			ELSE
				RETU .T.
			ENDIF
		ELSE
			RETU .T.
		ENDIF
	OTHERWISE
		RETU .T.
ENDCASE



ENDPROC
PROCEDURE tieneobsrelativas
LPARAMETERS toEsp
DO CASE
	CASE inlist(toEsp.TratEspecial,'024','025','001','009','307','303','306','010')
		RETU .F.
	OTHERWISE
		RETU .T.
ENDCASE


ENDPROC
PROCEDURE tieneobstecnicas
LPARAMETERS toEsp
DO CASE
	CASE inlist(toEsp.TratEspecial,'009','307','303','306','010')
		RETU .F.
	OTHERWISE
		RETU .T.
ENDCASE




ENDPROC
PROCEDURE _024_iniciar
LPARAMETERS toContenedor
toContenedor.oApEsp.ModcGral='M-8813SG-01-02'
this.CargarGarantiaObligatoria(toContenedor.oApEsp)
toContenedor.oriesgo.ramoprod 	= '064'
toContenedor.oriesgo.grupories	= '999'
toContenedor.oRiesgo.TariTasa	= 'S'
toContenedor.oApEsp.TieneMetodoCapitalReaseguro='.t.'

ENDPROC
PROCEDURE _025_iniciar
LPARAMETERS toContenedor
toContenedor.oApEsp.Consorcio='3'
toContenedor.oApEsp.ModcGral='MOD-81-01-02'
THIS.CargarGarantiaObligatoria(toContenedor.oApEsp)
toContenedor.oriesgo.ramoprod 	= '064'
toContenedor.oriesgo.grupories	= '000'
toContenedor.oRiesgo.TariTasa	= 'S'
toContenedor.oApEsp.TieneMetodoCapitalReaseguro='.t.'
ENDPROC
PROCEDURE _025_tratarrecepcion
LPARAMETERS toContenedor
LOCAL;
	loEspRiesgo, lnElemento, lnFila, loRiesgo

loEspRiesgo	= toContenedor.oApEsp
loRiesgo	= toContenedor.oRiesgo

LOCAL ARRAY aTemp(1)
aTemp=''
WITH loEspRiesgo

	IF EMPTY(.modcgral)
		.modcgral='MOD-81-01-02'
	ENDIF

	*LITERALLIBRE
	*- Recompongo el indicador para la aplicin, porq necesita tener garantas libres
	loRiesgo.inddivcom='1'

	*- Limpio los valores de la 003000 de aGaraTodas
	.aGarantiaTodas [ aSubScript(.aGarantiaTodas, ascan(.aGarantiaTodas,'003000') , 1) , 4] = 0
	.aGarantiaTodas [ aSubScript(.aGarantiaTodas, ascan(.aGarantiaTodas,'003000') , 1) , 5] = 0
	.aGarantiaTodas [ aSubScript(.aGarantiaTodas, ascan(.aGarantiaTodas,'003000') , 1) , 6] = 0
	
	*- Borro la garanta
	FOR i=ALEN(.aGarantia,1) TO 1 STEP -1
		IF .aGarantia(i,1)='003000'
			DIME aTemp (ALEN(.aGarantia,1) , ALEN(.aGarantia,2))
			ACOPY (.aGarantia,aTemp)
			oLibreria.Array_Eliminar(@aTemp,.T.,i)	&& borra la fila
			DIME .aGarantia (ALEN(aTemp,1) , ALEN(aTemp,2))
			ACOPY (aTemp,.aGarantia)
		ENDIF

		*- Recupero el porcentaje de consorcio
		IF .aGarantia(i,1)='018019'
			.aGarantia(i,5) = .porcencons
			*- Guarda la Tasa de consorcio
			.oldTasaConsorcio = .porcencons
		ENDIF

		*- Recupero la libre
		IF .aGarantia(i,1)='003246'
			.aGarantia(i,2) = .LITERALLIBRE
			.aGarantia(i,1) = '999001'
			for j=1 to alen(.aGarantiaTodas,1)
				if .aGarantiaTodas(j,1)='999999'
					*- Paso los valores de la matriz a aGarantia
					.aGarantia(i,3)	=.aGarantiaTodas(j,3)
					.aGarantia(i,7)	=.aGarantiaTodas(j,7)
					.aGarantia(i,8)	=.aGarantiaTodas(j,8)
					.aGarantia(i,9)	=.aGarantiaTodas(j,9)
					.aGarantia(i,10)=.aGarantiaTodas(j,10)
					.aGarantia(i,11)=.aGarantiaTodas(j,11)
					.aGarantia(i,12)=.aGarantiaTodas(j,12)

					*- Paso los valores de agarantia a todas							
					.aGarantiaTodas(j,1)='999001'					
					.aGarantiaTodas(j,4)=.aGarantia(i,4) 
					.aGarantiaTodas(j,5)=.aGarantia(i,5) 
					.aGarantiaTodas(j,6)=.aGarantia(i,6) 
					exit
				endif
			endfor			
		ENDIF
	ENDFOR
ENDWITH

ENDPROC
PROCEDURE _025_tarificar
LPARAMETERS toContenedor 
*- CRISTALES DIVERSOS
LOCAL ;
	lnTasa, lnPrima, lnCapitalConsorcio, lcTipOperacion, lcTariTasa, lnId003243, lnId003244, lnId003245, lnId999001

STORE 0  TO lnTasa, lnPrima, lnCapitalConsorcio, lnId003243, lnId003244, lnId003245, lnId999001 

lcTipOperacion	= toContenedor.oUsua.TipOperacion
lcTariTasa		= toContenedor.oRiesgo.TariTasa
loEsp			= toContenedor.oApEsp

*- Creacin de la variables
WITH loEsp

	
	FOR i=1 TO ALEN(THIS.aGarantiaTipoTarifa,1)

		*- Recupera las posiciones de las Garantias
		lcTemp	='lnId'+.aGarantia(i,1)
		&lcTemp	= i

		*- Recupera la forma de tarificar (prima tarifca,tasa, adquirida)
		*- T_lnId = Tipo Tarifa en el array
		lcTemp	='T_lnId'+THIS.aGarantiaTipoTarifa(i,1)
		LOCAL;
			&lcTemp
		&lcTemp	= THIS.aGarantiaTipoTarifa(i,2)

		*- F_lnId = Fila en el array
		lcTemp	='F_lnId'+THIS.aGarantiaTipoTarifa(i,1)
		LOCAL;
			&lcTemp
		&lcTemp	= i

		*- Sumo todos los capitales para el Cap. de consorcio
		if .aGarantia(i,1)#'018019'
			lnCapitalConsorcio = lnCapitalConsorcio + .aGarantia(i,4)
		endif	
	ENDFOR

	*- PRIMA TARIFA ACTUAL = 'X'
	*- PRIMA ADQUIRIDA = 'S'
	*- Tasa MANUAL = 'N'

	*!*	           003243 --> VERTICALES
	*!*	           003244 --> HORIZONTALES
	*!*	           003245 --> ROTULOS
	*!*	           003246 --> OTROS

	*- VERTICALES
	IF lnId003243 # 0
		IF lcTariTasa = 'N'
			*- Tasa
			*.aGarantia(lnId003243,5) = IIF(.aGarantia(lnId003243,5) < 80, 80, .aGarantia(lnId003243,5) )
			.aGarantia(lnId003243,5) = IIF(.aGarantia(lnId003243,5) < 0.08, 0.08, .aGarantia(lnId003243,5) )
		ELSE
			IF lcTariTasa = 'S' AND T_lnId003243 ='S'
				*- Adquirida
				.aGarantia(lnId003243 ,5) = THIS.aGarantiaTipoTarifa(F_lnId003243 ,5) && Mantengo la Tasa de Cartera
			ELSE
				*- Tarifa Actual
				*.aGarantia(lnId003243,5) = 80
				.aGarantia(lnId003243,5) = 0.08
			ENDIF
		ENDIF
		*.aGarantia(lnId003243 ,6) = .aGarantia(lnId003243 ,4) * .aGarantia(lnId003243 ,5) /1000
		.aGarantia(lnId003243 ,6) = .aGarantia(lnId003243 ,4) * .aGarantia(lnId003243 ,5) 
	ENDIF

	*- HORIZONTALES
	IF lnId003244 # 0
		IF lcTariTasa = 'N'
			*- Tasa
			*.aGarantia(lnId003244,5) = IIF(.aGarantia(lnId003244,5) < 100 , 100 , .aGarantia(lnId003244,5) )
			.aGarantia(lnId003244,5) = IIF(.aGarantia(lnId003244,5) < 0.1 , 0.1 , .aGarantia(lnId003244,5) )
		ELSE
			IF lcTariTasa = 'S' AND T_lnId003244 ='S'
				*- Adquirida
				.aGarantia(lnId003244 ,5) = THIS.aGarantiaTipoTarifa(F_lnId003244 ,5) && Mantengo la Tasa de Cartera
			ELSE
				*- Tarifa Actual
				*.aGarantia(lnId003244,5) = 100
				.aGarantia(lnId003244,5) = 0.1
			ENDIF
		ENDIF
		*.aGarantia(lnId003244 ,6) = .aGarantia(lnId003244 ,4) * .aGarantia(lnId003244 ,5) /1000
		.aGarantia(lnId003244 ,6) = .aGarantia(lnId003244 ,4) * .aGarantia(lnId003244 ,5)
	ENDIF

	*- ROTULOS
	IF lnId003245 # 0
		IF lcTariTasa = 'N'
			*- Tasa
			*.aGarantia(lnId003245,5) = IIF(.aGarantia(lnId003245,5) < 160 , 160, .aGarantia(lnId003245,5) )
			.aGarantia(lnId003245,5) = IIF(.aGarantia(lnId003245,5) < 0.16 , 0.16 , .aGarantia(lnId003245,5) )
		ELSE
			IF lcTariTasa = 'S' AND T_lnId003245 ='S'
				*- Adquirida
				.aGarantia(lnId003245 ,5) = THIS.aGarantiaTipoTarifa(F_lnId003245 ,5) && Mantengo la Tasa de Cartera
			ELSE
				*- Tarifa Actual
				*.aGarantia(lnId003245,5) = 160
				.aGarantia(lnId003245,5) = 0.16
			ENDIF
		ENDIF
		*.aGarantia(lnId003245 ,6) = .aGarantia(lnId003245 ,4) * .aGarantia(lnId003245 ,5) /1000
		.aGarantia(lnId003245 ,6) = .aGarantia(lnId003245 ,4) * .aGarantia(lnId003245 ,5) 
	ENDIF

	*- LIBRE
	IF lnId999001 # 0
		IF lcTariTasa = 'N'
			*- Tasa
			*.aGarantia(lnId999001,5) = IIF(.aGarantia(lnId999001,5) < 60 , 60 , .aGarantia(lnId999001,5) )
			.aGarantia(lnId999001,5) = IIF(.aGarantia(lnId999001,5) < 0.060 , 60 , .aGarantia(lnId999001,5) )
		ELSE
			IF lcTariTasa = 'S' AND T_lnId999001 ='S'
				*- Adquirida
				.aGarantia(lnId999001 ,5) = THIS.aGarantiaTipoTarifa(F_lnId999001 ,5) && Mantengo la Tasa de Cartera
			ELSE
				*- Tarifa Actual
				*.aGarantia(lnId999001,5) = 60
				.aGarantia(lnId999001,5) = 0.060
			ENDIF
		ENDIF
		*.aGarantia(lnId999001 ,6) = .aGarantia(lnId999001 ,4) * .aGarantia(lnId999001 ,5) / 1000
		.aGarantia(lnId999001 ,6) = .aGarantia(lnId999001 ,4) * .aGarantia(lnId999001 ,5) 
	ENDIF


	*-Consorcio
	IF lnId018019 # 0	
		.aGarantia(lnId018019 ,4) = lnCapitalConsorcio
		*.aGarantia(lnId018019 ,6) = .aGarantia(lnId018019 ,4) * .aGarantia(lnId018019 ,5)/100000
		.aGarantia(lnId018019 ,6) = .aGarantia(lnId018019 ,4) * .aGarantia(lnId018019 ,5) / 100
	ENDIF


	*- Capital de Reaseguro
	.capireas =.aGarantia(lnId018019 ,4)


ENDWITH


ENDPROC
PROCEDURE _018_verificar_como_tarificar
lparameters toContenedor, toContenedorC, tnCapitalC, tnTasaC, tnPrimaC, lnfila
*- Determina como se tarificar cada garanta, segn las condiciones.
*- lnfila=Fila que se esta procesando de la matriz de garantias

*- PRIMA TARIFA ACTUAL = 'X'
*- PRIMA ADQUIRIDA = 'S'
*- Tasa MANUAL = 'N'

local ;
	loEsp, loEspC

loEsp	=toContenedor.oApESp
loEspC	=toContenedorC.oApEsp

*- CONTINENTE
DO CASE
	CASE loEsp.aGarantia(lnFila,1)='016000'
		DO CASE
			CASE loEsp.aGarantia(lnFila,4) > tnCapitalC OR ;
					loEsp.ContinentePrimerRiesgo #loEspC.ContinentePrimerRiesgo OR;
					(loEsp.CentralAlarma='N' AND loEspC.CentralAlarma='S')
				*- Si se toca el capital en aumento se calculara prima de tarifa para esta cobertura
				*- Si se cambia el check de PRIMER RIESGO se calculara la prima a tarifa actual
				*- Si se quita la conexion de central de alarmas se calculara a prima de tarifa actual
				THIS.aGarantiaTipoTarifa(lnFila,2)='X'	&& Tarifa

			CASE ( loEsp.aGarantia(lnFila,4) <= tnCapitalC OR ;
					(loEsp.CentralAlarma='S' AND loEspC.CentralAlarma='N') ) AND;
					loEsp.ContinentePrimerRiesgo = loEspC.ContinentePrimerRiesgo
				*- Si se toca el capital en disminucin se calcular prima adquirida
				*- Si se incorpora la conexion de central de alarmas para INCENDIO se calculara con prima adquirida, haciendo bonificacion correspondiente
				THIS.aGarantiaTipoTarifa(lnFila,2)='S'	&& ADQUIRIDA
		ENDCASE

		*- CONTENIDO
	CASE loEsp.aGarantia(lnFila,1)='015000'
		DO CASE
			CASE loEsp.aGarantia(lnFila,4) <= tnCapitalC OR ;
					(loEsp.CentralAlarma='S' AND loEspC.CentralAlarma='N')
				*- Si se toca el capital en disminucin se calculara prima adquirida
				*- Si se incorpora la conexion de central de alarmas para INCENDIO se calculara con prima adquirida, haciendo bonificacion correspondiente
				THIS.aGarantiaTipoTarifa(lnFila,2)='S'	&& ADQUIRIDA

			CASE loEsp.aGarantia(lnFila,4) > tnCapitalC OR ;
					(loEsp.CentralAlarma='N' AND loEspC.CentralAlarma='S')
				*- Si se toca el capital en aumento se calculara prima de tarifa para esta cobertura
				*- Si se cambia el check de PRIMER RIESGO se calculara la prima a tarifa actual
				*- Si se quita la conexion de central de alarmas se calculara a prima de tarifa actual
				THIS.aGarantiaTipoTarifa(lnFila,2)='X'	&& Tarifa
		ENDCASE

		*- DEFENSA JURDICA
	CASE loEsp.aGarantia(lnFila,1)='013000'
		IF loEsp.Empleados > loEspC.Empleados OR loEsp.Titulares > loEspC.Titulares
			THIS.aGarantiaTipoTarifa(lnFila,2)='X'	&& Tarifa
		ELSE
			THIS.aGarantiaTipoTarifa(lnFila,2)='S'	&& Adquirida
		ENDIF

		*- ROBO Y EXPOLIACION Y DEPENDIENTES DE ESTA GARA.
	CASE INLIST(loEsp.aGarantia(lnFila,1),'004000','162000','159000','161000','160000')
		DO CASE
			CASE loEsp.NivelTotal < loEspC.NivelTotal
				*- Si el nivel de las protecciones de robo es inferior al que venga de cartera se calcula prima de tarifa
				THIS.aGarantiaTipoTarifa(lnFila,2)='X' && Tarifa

			CASE loEsp.NivelTotal >= loEspC.NivelTotal
				THIS.aGarantiaTipoTarifa(lnFila,2)='S'	&& Adquirida
		ENDCASE

		*- ACCIDENTES E INVALIDEZ
	CASE INLIST(loEsp.aGarantia(lnFila,1),'023024', '023025')
		IF loEsp.AccAsegurado > loEspC.AccAsegurado
			THIS.aGarantiaTipoTarifa(lnFila,2)='X'	&& Tarifa
		ELSE
			THIS.aGarantiaTipoTarifa(lnFila,2)='S'	&& Adquirida
		ENDIF

		*- AVERIA MAQUINARIA
	CASE INLIST(loEsp.aGarantia(lnFila,1),'032000')
		IF loEsp.aGarantia(lnFila,4) > tnCapitalC
			THIS.aGarantiaTipoTarifa(lnFila,2)='X'	&& Tarifa
		ELSE
			THIS.aGarantiaTipoTarifa(lnFila,2)='S'	&& Adquirida
		ENDIF

		*- AMPLIACION DE ROTURAS
	CASE INLIST(loEsp.aGarantia(lnFila,1),'165000')
		IF loEsp.aGarantia(lnFila,4) > tnCapitalC
			THIS.aGarantiaTipoTarifa(lnFila,2)='X'	&& Tarifa
		ELSE
			THIS.aGarantiaTipoTarifa(lnFila,2)='S'	&& Adquirida
		ENDIF
ENDCASE && Case para las cada garantia


ENDPROC
PROCEDURE _025_verificar_como_tarificar
LPARAMETERS toContenedor, toContenedorC, tnCapitalC, tnTasaC, tnPrimaC, lnFila
*- Determina como se tarificar cada garanta, segn las condiciones.
*- lnfila=Fila que se esta procesando de la matriz de garantias

*- PRIMA TARIFA ACTUAL = 'X'
*- PRIMA ADQUIRIDA = 'S'
*- Tasa MANUAL = 'N'

LOCAL ;
	loEsp, loEspC

loEsp	=toContenedor.oApESp
loEspC	=toContenedorC.oApEsp

*           003-243 --> VERTICALES
*           003-244 --> HORIZONTALES
*           003-245 --> ROTULOS
*           003-246 = 999001 --> OTROS

*-------------------------------------------------------------------
*	Como no hay condiciones para que cambien el tipo de tarificacin
*	entonces queda el array (aGarantiaTipoTarifa) como viene.  
*	El case que esta abajo es un ejemplo de como se debera trabajar 
*	para las condiciones de cada garantia
retu
*-------------------------------------------------------------------

*!*	DO CASE
*!*			*- VERTICALES
*!*		CASE loEsp.aGarantia(lnFila,1)='003243'
*!*			IF
*!*				THIS.aGarantiaTipoTarifa(lnFila,2)='X'	&& Trifa
*!*			ELSE
*!*				THIS.aGarantiaTipoTarifa(lnFila,2)='S'	&& Adquirida
*!*			ENDIF
*!*			
*!*			*- HORIZONTALES
*!*		CASE loEsp.aGarantia(lnFila,1)='003243'
*!*			IF
*!*				THIS.aGarantiaTipoTarifa(lnFila,2)='X'	&& Trifa
*!*			ELSE
*!*				THIS.aGarantiaTipoTarifa(lnFila,2)='S'	&& Adquirida
*!*			ENDIF

*!*			*- ROTULOS
*!*		CASE loEsp.aGarantia(lnFila,1)='003243'
*!*			IF
*!*				THIS.aGarantiaTipoTarifa(lnFila,2)='X'	&& Trifa
*!*			ELSE
*!*				THIS.aGarantiaTipoTarifa(lnFila,2)='S'	&& Adquirida
*!*			ENDIF

*!*			*- Otros
*!*		CASE loEsp.aGarantia(lnFila,1)='999001'
*!*			IF
*!*				THIS.aGarantiaTipoTarifa(lnFila,2)='X'	&& Trifa
*!*			ELSE
*!*				THIS.aGarantiaTipoTarifa(lnFila,2)='S'	&& Adquirida
*!*			ENDIF

*!*	ENDCASE && Case para las cada garantia


ENDPROC
PROCEDURE _025_trataremision
LPARAMETERS  toEsp, toriesgo
LOCAL;
	lnTotPrima, lnTotCapital, loDbEmdw0003
LOCAL ARRAY laTemp(1)
loDbEmdw0003=createObject('Emdw0003')

STORE 0 TO lnTotPrima, lnTotCapital
WITH toEsp
	FOR i=1 TO ALEN (.aGarantiaTodas,1)
		IF SUBSTR(.aGarantiaTodas(i,1),1,3)='999'
			.literalLibre=.aGarantiaTodas(i,2)
			.aGarantiaTodas(i,1)='003246'
		ENDIF
		IF .aGarantiaTodas(i,1)#'018019' and .aGarantiaTodas(i,1)#'003000'
			lnTotCapital 	= lnTotCapital 	+ .aGarantiaTodas(i,4)
			lnTotPrima 		= lnTotPrima 	+ .aGarantiaTodas(i,6)

			*- Limpio el codigo de desgloce por q el host lo necesita asi...
			IF .aGarantiaTodas(i,1)#'003000'
				.aGarantiaTodas(i,9)='0'
			ENDIF
		ENDIF
	ENDFOR

	*- Sumo todas las primas y los capitales en la 003000

	.aGarantiaTodas [ aSubScript(.aGarantiaTodas, ascan(.aGarantiaTodas,'003000') , 1) , 4] = lnTotCapital
	.aGarantiaTodas [ aSubScript(.aGarantiaTodas, ascan(.aGarantiaTodas,'003000') , 1) , 5] = lnTotPrima/lnTotCapital*1000
	.aGarantiaTodas [ aSubScript(.aGarantiaTodas, ascan(.aGarantiaTodas,'003000') , 1) , 6] = lnTotPrima

	*!*		DIME laTemp (ALEN(.aGarantiaTodas,1) , ALEN(.aGarantiaTodas,2))
	*!*		ACOPY (.aGarantiaTodas,laTemp)
	*!*		THIS.Insertar_garantia( @laTemp, .Modalidad, '044', '003000', lnTotCapital, lnTotPrima/lnTotCapital*1000 ,lnTotPrima)
	*!*		DIME . aGarantiaTodas(ALEN(laTemp,1) , ALEN(laTemp,2))
	*!*		ACOPY (laTemp,.aGarantiaTodas)


	*- Recupero la modalidad para el host
	.Modalidad = loDbEmdw0003.recuperar_mod_map_tratespecial(.TratEspecial)
ENDWITH

ENDPROC
PROCEDURE _026_iniciar
LPARAMETERS toContenedor
LOCAL loEsp
loEsp=toContenedor.oApEsp

#IF debugmode
	WAIT WIND NOWAIT 'INICIANDO MATRIZ ACCIDENTES RENTA - 026'
#ENDIF

WITH loEsp
	.ModcGral='SG4057'
	toContenedor.oriesgo.ramoprod 	= '065'
	toContenedor.oriesgo.grupories	= '02'
	
	THIS.CargarGarantiaObligatoria(toContenedor.oApEsp)

	FOR i=1 TO ALEN(.aGarantia,1)
		DO CASE

			CASE .aGarantia(i,1)='023024'
				*- Muerte por accidente
				.aGarantia(i,4)=15025.30
				.aGarantia(i,5)=0.38
				.aGarantia(i,6)=5.79

			CASE .aGarantia(i,1)='023060'
				*- Renta Muerte por acc.
				.aGarantia(i,4)=45356.82
				.aGarantia(i,5)=0.38
				.aGarantia(i,6)=17.48

			CASE .aGarantia(i,1)='023025'
				*- Invalidez permanente por accidente
				.aGarantia(i,4)=15025.30
				.aGarantia(i,5)=0.38
				.aGarantia(i,6)=5.79

			CASE .aGarantia(i,1)='023057'
				*- Incapacidad profesional
				.aGarantia(i,4)=15025.30
				.aGarantia(i,5)=0.38
				.aGarantia(i,6)=5.79

			CASE .aGarantia(i,1)='023061'
				*- renta incapacidad prof
				.aGarantia(i,4)=45356.82
				.aGarantia(i,5)=0.38
				.aGarantia(i,6)=17.48

			CASE .aGarantia(i,1)='011012'
				*- asistencia en domicilio
				.aGarantia(i,4)=3005.06
				.aGarantia(i,5)=0.45
				.aGarantia(i,6)=1.38

			CASE .aGarantia(i,1)='011014'
				*- asistencia en viajes
				.aGarantia(i,4)=12020.24
				.aGarantia(i,5)=0.17
				.aGarantia(i,6)=2.16

*!*				CASE .aGarantia(i,1)='018020'
*!*					#IF debugmode
*!*						WAIT WIND NOWAIT 'no te olvides de cambair el consorcio !!!'
*!*						*- asistencia en viajes
*!*						.aGarantia(i,4)=0
*!*						.aGarantia(i,5)=0
*!*						.aGarantia(i,6)=250  			&&& SOLO PARA PROBAR NUEVA PROD
*!*					#ENDIF
		ENDCASE
	ENDFOR
ENDWITH

ENDPROC
PROCEDURE _026_validacion
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC
LOCAL loError, loEsp
WITH toContenedor
	loError	=.oError
	loEsp	= .oApEsp

*!*		*- Capital de Reaseguro
*!*		IF loEsp.capireas<=0
*!*			loError.inser_er("V00241","capireas",'Capital de Reaseguro no puede ser 0','','')
*!*		ENDIF
	
	
ENDWITH

ENDPROC
PROCEDURE _024_trataremision
LPARAMETERS  toEsp, toriesgo
LOCAL loDbEmdw0003
loDbEmdw0003=CREATEOBJECT('Emdw0003')
*- Recupero la modalidad para el host
toEsp.Modalidad = loDbEmdw0003.recuperar_mod_map_tratespecial(toEsp.TratEspecial)

*!*	*- Cambio el indicador de diversos a Combinados
*!*	*- para que pase el comuni como combinado (sin libre)
*!*	toriesgo.inddivcom='2'


ENDPROC
PROCEDURE _024_tratarrecepcion
LPARAMETERS toContenedor
LOCAL;
	loEsp, lnElemento, lnFila, loRiesgo, lnCapconsorcio, lnCapCristales

loEsp	= toContenedor.oApEsp
loRiesgo	= toContenedor.oRiesgo
FOR i=1 TO ALEN(loEsp.aGarantia,1)
	IF loEsp.aGarantia(i,1)='003000'
		lnCapconsorcio=loEsp.aGarantia(i,4)
		lnCapCristales=round(loEsp.aGarantia(i,4),2)
		lnPrimaCristales=loEsp.aGarantia(i,6)
		EXIT
	ENDIF
ENDFOR

FOR i=1 TO ALEN(loEsp.aGarantia,1)
	IF loEsp.aGarantia(i,1)='018019'
		loEsp.aGarantia(i,4) = lnCapconsorcio
		EXIT
	ENDIF
ENDFOR

IF EMPTY(loEsp.modcgral)
	loEsp.modcgral='M-8813SG-01-02'
ENDIF

if ascan(loEsp.aCapitales, lnCapCristales) = 0
	dime loEsp.aCapitales(alen(loEsp.aCapitales,1)  +1 , alen(loEsp.aCapitales,2))
	loEsp.aCapitales(alen(loEsp.aCapitales,1) , 1)= lnCapCristales
	loEsp.aCapitales(alen(loEsp.aCapitales,1) , 2)= lnPrimaCristales
	loEsp.aCapitales(alen(loEsp.aCapitales,1) , 3)= lnPrimaCristales
endif
=asort(loEsp.aCapitales,1)

*	.aCapitales(1,1) = 330.56
	
	
*!*	LOCAL ARRAY aTemp(1)
*!*	aTemp=''
*!*	WITH loEsp
*!*		IF EMPTY(.modcgral)
*!*			.modcgral='MOD-81-01-02'
*!*		ENDIF

*!*	*!*		SET ASSERT ON
*!*	*!*		ASSERT .F. MESSAGE 'DEBU'

*!*
*!*		*LITERALLIBRE
*!*		*- Recompongo el indicador para la aplicin, porq necesita tener garantas libres
*!*		loRiesgo.inddivcom='1'
*!*		*SET STEp on
*!*		*- Borro la garanta
*!*		FOR i=ALEN(.aGarantia,1) TO 1 STEP -1
*!*			IF .aGarantia(i,1)='003000'
*!*				DIME aTemp (ALEN(.aGarantia,1) , ALEN(.aGarantia,2))
*!*				ACOPY (.aGarantia,aTemp)
*!*				oLibreria.Array_Eliminar(@aTemp,.T.,i)	&& borra la fila
*!*				DIME .aGarantia (ALEN(aTemp,1) , ALEN(aTemp,2))
*!*				ACOPY (aTemp,.aGarantia)
*!*			ENDIF
*!*			*- Recupero el porcentaje de consorcio
*!*			IF .aGarantia(i,1)='018019'
*!*				.PorcentajeConsorcio=(.aGarantia(i,6) / .aGarantia(i,4)) * 1000
*!*			ENDIF
*!*
*!*			*- Recupero la libre
*!*			IF .aGarantia(i,1)='003246'
*!*				.aGarantia(i,2) = .LITERALLIBRE
*!*				.aGarantia(i,1) = '999001'
*!*			ENDIF
*!*		ENDFOR
*!*	ENDWITH

ENDPROC
PROCEDURE _026_tratarrecepcion
LPARAMETERS toContenedor

local array laDatos(1)

local ;
	loEsp ,loDBEmdw0008

loDBEmdw0008=CreateObject('emdw0008')
loEsp		=toContenedor.oApEsp

*- Recupera el literal de la Profesin
loDBEmdw0008.Recuperar_profesiones(@laDatos)
for i=1 to alen(laDatos,1)
	if alltrim(loEsp.CodProfesion)=alltrim(laDatos(i,1))
		loEsp.LiteralProfesion=laDatos(i,2)
		loEsp.GrupoRiesgoProfesion=laDatos(i,3)
		exit
	endif
endfor
loEsp.ModcGral='SG4057'
loEsp.ModalProd='0150'

*- Pedido por Santi el 01/09/2003
if val(alltrim(loEsp.beneficiario))=12
	loEsp.beneficiario='TENDRAN, TAL CONDICION, POR ORDEN PREFERENTE, EL CONYUGE, LOS HIJOS, LOS PADRES O LOS HEREDEROS LEGALES DEL ASEGURADO'
endif
	



ENDPROC
PROCEDURE _027_valid
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC

* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos


LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Especfico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF

loEsp.CrearCursorGarantia()

*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !EMPTY(ra_cover) ;
	INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
	RETU
ENDIF

*- Verifica que las coberturas no tengan valores en el capital y en la prima
SELECT * FROM CurGarantia ;
	WHERE ra_cobGar = 'C' and (!EMPTY(CAPITAL) OR  !EMPTY(PRIMA)) ;
	INTO CURSOR cTemp
IF _TALLY>0
	loError.inser_er("V00240","oEspRiesgo",'Coberturas Contratadas, valores no vlidos','','')
ENDIF


*- Nro de garantas contratadas
*- Verifica que las garantas tengan capital  y prima
SELECT * FROM CurGarantia ;
	WHERE !inlist(RA_COVER,'018019','018020','023030') and !EMPTY(RA_COVER) AND (EMPTY(CAPITAL) OR  EMPTY(PRIMA)) and ra_cobGar # 'C';
	INTO CURSOR cTemp
IF _TALLY>0
	loError.inser_er("V00240","oEspRiesgo",'Garantas Contratadas, valores no vlidos','','')
	RETU
ENDIF


*- Verifica que las garanta de Asistencia teng Prima  pero puede no tener capital
SELECT * FROM CurGarantia ;
	WHERE inlist(RA_COVER,'023030') and EMPTY(PRIMA);
	INTO CURSOR cTemp
IF _TALLY>0
	loError.inser_er("V00240","oEspRiesgo",'Asistencia Sanitaria, la prima no puede ser 0','','')
	RETU
ENDIF

*- Valida que tenga consorcio si tiene alguna del 015 o 016
SELECT * FROM CurGarantia ;
	WHERE inlist(substr(RA_COVER,1,3),'015','016') ;
	INTO CURSOR cTemp
IF _TALLY>0
	SELECT * FROM CurGarantia ;
		WHERE inlist(RA_COVER,'018019','018020') ;
		INTO CURSOR cTemp
	if 	_TALLY=0
		loError.inser_er("V00240","oEspRiesgo",'Consorcio, Garanta no contratada','','')
	endif
ENDIF



ENDPROC
PROCEDURE _027_trataremision
LPARAMETERS toEsp , loRiesgo
*- 057 colectivos mapfre

LOCAL;
	loDbEmdw0003, lcModTemp

lcModTemp=''
loDbEmdw0003=CREATEOBJECT('emdw0003')
toEsp.Modalidad = loDbEmdw0003.recuperar_mod_map_tratespecial(toEsp.TratEspecial)
this._027_setear_tipoCapital_023030(toEsp)
ENDPROC
PROCEDURE _195_trataremision
LPARAMETERS loContenedor, laSumarEn
LOCAL ;
	loEsp

loEsp = loContenedor.oApEsp


IF oLibreria.EsUnArray("laSumarEn")
	FOR i=1 TO ALEN(loEsp.aGarantia,1)
		
	ENDFOR
ELSE

ENDIF

ENDPROC
PROCEDURE capreaestandard
LPARAMETERS toEsp
*- Suma los capitales de todas las garantas excepto el consorcio

LOCAL lnCap

lnCap=0

FOR i=1 TO ALEN(toEsp.aGarantia,1)
	IF !INLIST(toEsp.aGarantia(i,1),'018019','018020','018021')
		lnCap = lnCap + toEsp.aGarantia(i,4)
	ENDIF
ENDFOR
IF lnCap # 0
	toEsp.capireas =  lnCap
ENDIF




ENDPROC
PROCEDURE _vcobgar_057
LPARAMETERS toContenedor
local ;
	loEsp
	
loEsp=toContenedor.oApEsp

*- Valida las coberturas y garantias del ramo 057
THIS.vCoberturasGarantias(toContenedor.oError, '023000', 'Accidente Colectivo')
FOR i=1 TO ALEN(loEsp.aGarantia,1)
	IF loEsp.aGarantia(i,1)='018020' AND (loEsp.aGarantia(i,6)=0 OR loEsp.aGarantia(i,4)#0 OR loEsp.aGarantia(i,5) # 0 )
		DO CASE
			CASE loEsp.aGarantia(i,4) # 0
				toContenedor.oError.inser_er("V00240","oEspRiesgo",'Consorcio - el capital debe ser 0','','')
			CASE loEsp.aGarantia(i,5) # 0
				toContenedor.oError.inser_er("V00240","oEspRiesgo",'Consorcio - la tasa debe ser 0','','')
			CASE loEsp.aGarantia(i,6) = 0
				toContenedor.oError.inser_er("V00240","oEspRiesgo",'Consorcio - la prima no puede ser 0','','')
		ENDCASE
	ENDIF
ENDFOR

ENDPROC
PROCEDURE v_externos
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC

* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos


LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Especfico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF

loEsp.CrearCursorGarantia()

*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !EMPTY(ra_cover) ;
	INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
	RETU
ENDIF

*- Verifica que las coberturas no tengan valores en el capital y en la prima
*!*	SELECT * FROM CurGarantia ;
*!*		WHERE ra_cobGar = 'C' AND (!EMPTY(CAPITAL) OR  !EMPTY(PRIMA)) ;
*!*		INTO CURSOR cTemp
*!*	IF _TALLY>0
*!*		loError.inser_er("V00240","oEspRiesgo",'Coberturas Contratadas, valores no vlidos','','')
*!*	ENDIF


*- Nro de garantas contratadas
*- Verifica que las garantas tengan capital  y prima
SELECT * FROM CurGarantia ;
	WHERE !INLIST(RA_COVER,'018019','018020') AND !EMPTY(RA_COVER) AND (EMPTY(CAPITAL) OR  EMPTY(PRIMA)) AND ra_cobGar # 'C';
	INTO CURSOR cTemp
IF _TALLY>0
	loError.inser_er("V00240","oEspRiesgo",'Garantas Contratadas, valores no vlidos','','')
	RETU
ENDIF

*- Valida que tenga consorcio si tiene alguna del 015 o 016
SELECT * FROM CurGarantia ;
	WHERE INLIST(SUBSTR(RA_COVER,1,3),'015','016') ;
	INTO CURSOR cTemp
IF _TALLY>0
	SELECT * FROM CurGarantia ;
		WHERE INLIST(RA_COVER,'018019','018020') ;
		INTO CURSOR cTemp
	IF 	_TALLY=0
		loError.inser_er("V00240","oEspRiesgo",'Consorcio, Garanta no contratada','','')
	ENDIF
ENDIF

*- Valida que tenga prima la garantia de consorcio
SELECT SUM(PRIMA) AS totPrima FROM CurGarantia ;
	WHERE INLIST(RA_COVER,'018019','018020') INTO CURSOR cTemp
IF _TALLY#0
	*- 	Tiene algn consorcio
	IF cTemp.totPrima=0
		*- No puso prima en la gara consorcio
		loError.inser_er("V00240","oEspRiesgo",'Consorcio, la prima no puede ser 0','','')
	ENDIF
ENDIF


ENDPROC
PROCEDURE _027_setear_tipocapital_023030
lparameters toEsp
WITH toEsp
	*- Setea el tipo de capital para el Host, segn sea limitado o ilimitado
	FOR I=1 TO ALEN(.aGarantiaTodas,1)
		IF .aGarantiaTodas(i,1)='023030'
			IF 	.aGarantiaTodas(i,4)= 0
				.aGarantiaTodas(i,11)= 2 && ilimitado
			ELSE
				.aGarantiaTodas(i,11)= 1 && normal
			ENDIF
			exit
		ENDIF
	ENDFOR

	FOR I=1 TO ALEN(.aGarantia,1)
		IF .aGarantia(i,1)='023030'
			IF 	.aGarantia(i,4)= 0
				.aGarantia(i,11)= 2 && ilimitado
			ELSE
				.aGarantia(i,11)= 1 && normal
			ENDIF
			exit
		ENDIF
	ENDFOR
	
ENDWITH

ENDPROC
PROCEDURE tienebeneficiario
LPARAMETERS toEsp, toUsua
DO CASE
	CASE inlist(toUsua.Ramo,'040','042','044','045','056','057','061','062','064','066','067','068','072','073','096','935','934') and not inlist(toEsp.TratEspecial,'001','018','016')
		RETU .F.
	OTHERWISE
		RETU .T.
ENDCASE

ENDPROC
PROCEDURE _018_calcular_capital_reaseguro
LPARAMETERS toEsp, tcTipOperacion, tcCodPostRiesgo, tcTariTasa


*- ramo 074 (Multiriesgo comercios de caja)
LOCAL ;
	lcTemp, lcTemp2, lnTasa, lnPrima, lnTemp, lnTemp2, lnPorcentajeRobo, lnTotNetaMinima, lnPrimaNetaC

STORE '' TO lcTemp, lcTemp2
STORE 0  TO lnTasa, lnPrima, lnTemp, lnTemp2, lnPorcentajeRobo, lnTotNetaMinima, lnPrimaNetaC

LOCAL;
	lnId015000, lnId013000, lnId016004, lnId012000, lnId010000, ;
	lnId016000, lnId023000, lnId018019, lnId163000, lnId164000, ;
	lnId165000, lnId031000, lnId032000, lnId071000, lnId023024, ;
	lnId023025, lnId004000, lnId160000, lnId161000, lnId159000, lnId162000

STORE 0 TO 	;
	lnId015000, lnId013000, lnId016004, lnId012000, lnId010000, ;
	lnId016000, lnId023000, lnId018019, lnId163000, lnId164000, ;
	lnId165000, lnId031000, lnId032000, lnId071000, lnId023024, ;
	lnId023025, lnId004000, lnId160000, lnId161000, lnId159000, lnId162000

WITH toEsp
	*- Recupera las posiciones de las Garantias
	FOR i=1 TO ALEN(.aGarantia,1)
		lcTemp	='lnId'+.aGarantia(i,1)
		&lcTemp	= i
	ENDFOR

	*- PRIMA TARIFA ACTUAL = 'X'
	*- PRIMA ADQUIRIDA = 'S'
	*- Tasa MANUAL = 'N'

	*- Capital de Reaseguro
	*- contenido+ cte + robo + acc + inva + averia maq
	.capireas = IIF(lnId016000#0 , .aGarantia(lnId016000,4) , 0)+ IIF(lnId015000#0 , .aGarantia(lnId015000,4) , 0) + IIF(lnId032000#0 , .aGarantia(lnId032000,4) , 0) +  IIF(lnId004000#0 , .aGarantia(lnId004000,4) , 0) + IIF(lnId023024#0 , .aGarantia(lnId023024,4) , 0) + IIF(lnId023025#0 , .aGarantia(lnId023025,4) , 0)
		
endwith
ENDPROC
PROCEDURE v_externos_div
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC

* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos


LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Especfico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF

loEsp.CrearCursorGarantia()

*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !EMPTY(ra_cover) ;
	INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
	RETU
ENDIF

*- Verifica que las coberturas no tengan valores en el capital y en la prima
*!*	SELECT * FROM CurGarantia ;
*!*		WHERE ra_cobGar = 'C' AND (!EMPTY(CAPITAL) OR  !EMPTY(PRIMA)) ;
*!*		INTO CURSOR cTemp
*!*	IF _TALLY>0
*!*		loError.inser_er("V00240","oEspRiesgo",'Coberturas Contratadas, valores no vlidos','','')
*!*	ENDIF


*- Nro de garantas contratadas
*- Verifica que las garantas tengan capital  y prima
*!*	SELECT * FROM CurGarantia ;
*!*		WHERE !INLIST(RA_COVER,'018019','018020') AND !EMPTY(RA_COVER) AND (EMPTY(CAPITAL) OR  EMPTY(PRIMA)) AND ra_cobGar # 'C';
*!*		INTO CURSOR cTemp
*!*	IF _TALLY>0
*!*		loError.inser_er("V00240","oEspRiesgo",'Garantas Contratadas, valores no vlidos','','')
*!*		RETU
*!*	ENDIF

*!*	*- Valida que tenga consorcio si tiene alguna del 015 o 016
*!*	SELECT * FROM CurGarantia ;
*!*		WHERE INLIST(SUBSTR(RA_COVER,1,3),'015','016') ;
*!*		INTO CURSOR cTemp
*!*	IF _TALLY>0
*!*		SELECT * FROM CurGarantia ;
*!*			WHERE INLIST(RA_COVER,'018019','018020') ;
*!*			INTO CURSOR cTemp
*!*		IF 	_TALLY=0
*!*			loError.inser_er("V00240","oEspRiesgo",'Consorcio, Garanta no contratada','','')
*!*		ENDIF
*!*	ENDIF

*- Valida que tenga prima la garantia de consorcio
SELECT SUM(PRIMA) AS totPrima FROM CurGarantia ;
	WHERE INLIST(RA_COVER,'018019','018020','018021') INTO CURSOR cTemp
IF _TALLY#0
	*- 	Tiene algn consorcio
	IF cTemp.totPrima=0
		*- No puso prima en la gara consorcio
		loError.inser_er("V00240","oEspRiesgo",'Consorcio, la prima no puede ser 0','','')
	ENDIF
ENDIF


ENDPROC
PROCEDURE caprea_diversos
LPARAMETERS toEsp
*- Suma los capitales de todas las garantas excepto el consorcio

LOCAL lnCap

lnCap=0

FOR i=1 TO ALEN(toEsp.aGarantia,1)
	IF !INLIST(toEsp.aGarantia(i,10),'G','L') AND !INLIST(toEsp.aGarantia(i,1),'018019','018020','018021')
		lnCap = lnCap + toEsp.aGarantia(i,4)
	ENDIF
ENDFOR
IF lnCap # 0
	toEsp.capireas =  lnCap
ENDIF




ENDPROC
PROCEDURE autocalcular_tasareal
LPARAMETERS tnSuma, TnTasa, TnPrima, tcControl, toEsp, tcIdGarantia
LOCAL;
	llSuma, llTasa, llPrima

llSuma = !EMPTY(tnSuma)
llTasa = !EMPTY(TnTasa)
llPrima= !EMPTY(TnPrima)

*- Tiene preponderacia la Prima y el Capital
DO CASE
	CASE  tcControl='Suma'
		IF tnSuma < tnPrima
			tnPrima	= 0
			tnTasa 	= 0
		ENDIF
		IF tnSuma != 0
			DO CASE
				CASE llSuma AND llPrima   &&(Tenga o no Tasa no importa, tiene preponderancia la Prima)
					TnTasa = (TnPrima / tnSuma) 

				CASE llSuma AND llTasa AND !llPrima
					TnPrima = tnSuma * TnTasa

				CASE !llSuma AND llTasa AND llPrima
					*- Nada
			ENDCASE
		ELSE
			TnTasa = 0
		ENDIF

	CASE  tcControl='Tasa'
		DO CASE
			CASE !llSuma AND llTasa AND llPrima
				*- Nada
			CASE llSuma AND llTasa
				TnPrima = tnSuma * TnTasa

			CASE llSuma AND !llTasa AND llPrima
				TnTasa = TnPrima / tnSuma

			CASE llSuma AND !llTasa AND !llPrima
				*- Nada

			CASE !llSuma AND !llTasa AND llPrima
				*- Nada
		ENDCASE
	CASE tcControl='Prima'
		IF tnPrima > tnSuma AND tnSuma # 0
			tnSuma  = 0
			tnTasa  = 0
		ELSE
			DO CASE
				CASE !llSuma AND llTasa AND llPrima
					*- Nada
				CASE !llSuma AND llTasa AND !llPrima
					TnTasa = 0
				CASE llSuma AND llPrima
					TnTasa = TnPrima / tnSuma

				CASE llSuma AND !llTasa AND !llPrima
					*- Nada

				CASE !llSuma AND !llTasa AND llPrima
					*- Nada
			ENDCASE
		ENDIF
ENDCASE

ENDPROC
PROCEDURE _195_iniciar
LPARAMETERS toContenedor
*- RC Privada OED ramo 046

IF INLIST(VAL(toContenedor.oUsua.entidad),2,14)
	toContenedor.oApEsp.Epigrafe='085'
	FOR i=1 TO ALEN(toContenedor.oApEsp.aGarantia,1)
		IF toContenedor.oApEsp.aGarantia(i,1)='010000'
			toContenedor.oApEsp.aGarantia(i,4)=150253
			EXIT
		ENDIF
	ENDFOR
ENDIF

ENDPROC
PROCEDURE _195_validar
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC
LOCAL loError, loEsp


WITH toContenedor
	loError	=.oError
	loEsp	= .oApEsp

	IF EMPTY(VAL(loEsp.Epigrafe))
		loError.inser_er("V00240","oEspRiesgo",'Epgrafe no vlido','','')
	ELSE
		IF INLIST(.oUsua.TipOperacion,'1','2','6')
			IF INLIST(VAL(.oUsua.entidad),2,14)
				IF loEsp.Epigrafe#'085'
					loError.inser_er("V00240","oRiesgo",'Epgrafe no vlido','','')
				ENDIF
			ENDIF
		ELSE
			*- Suplementos
			IF INLIST(VAL(.oUsua.entidad),2,14)
				IF loEsp.Epigrafe#'085'
					IF TYPE('toContenedorC')='O' AND loEsp.Epigrafe # toContenedorC.oApEsp.Epigrafe
						loError.inser_er("V00240","oEspRiesgo",'Epgrafe no vlido','','')
					ENDIF
				ENDIF
			ENDIF
		ENDIF
	ENDIF


	*-----------------------------
	*- Validacin de los capitales
	*-----------------------------
	FOR i=1 TO ALEN(toContenedor.oApEsp.aGarantia,1)
		IF toContenedor.oApEsp.aGarantia(i,1)='010000'
			IF INLIST(.oUsua.TipOperacion,'1','2','6')
				*- Nueva produccion
				IF INLIST(VAL(.oUsua.entidad),2,14)
					IF !INLIST(toContenedor.oApEsp.aGarantia(i,4),150253,300506)
						loError.inser_er("V00240","oEspRiesgo",'Capital debe ser 150253  o 300506 ','','')
					ENDIF
				ELSE
					IF toContenedor.oApEsp.aGarantia(i,4)>601021
						loError.inser_er("C00011","oEspRiesgo",'Capital superior a 601021 ','','')
					ENDIF
				ENDIF
			ELSE
				*- Suplemento
				IF INLIST(VAL(.oUsua.entidad),2,14)
					IF !INLIST(toContenedor.oApEsp.aGarantia(i,4),150253,300506)
						IF TYPE('toContenedorC')='O' AND toContenedor.oApEsp.aGarantia [ aSubScript(toContenedor.oApEsp.aGarantia, aScan(toContenedor.oApEsp.aGarantia,'010000') , 1) , 4] # toContenedorC.oApEsp.aGarantia [ aSubScript(toContenedorC.oApEsp.aGarantia, aScan(toContenedorC.oApEsp.aGarantia,'010000') , 1) , 4]
							*- El capital de cartera es # al actual
							loError.inser_er("V00240","oEspRiesgo",'Capital debe ser 150253  o 300506 ','','')
						ENDIF
					ENDIF
				ELSE
					IF toContenedor.oApEsp.aGarantia(i,4)>601021
						IF TYPE('toContenedorC')='O' AND toContenedor.oApEsp.aGarantia [ aSubScript(toContenedor.oApEsp.aGarantia, aScan(toContenedor.oApEsp.aGarantia,'010000') , 1) , 4] # toContenedorC.oApEsp.aGarantia [ aSubScript(toContenedorC.oApEsp.aGarantia, aScan(toContenedorC.oApEsp.aGarantia,'010000') , 1) , 4]
							loError.inser_er("C00011","oEspRiesgo",'Capital superior a 601021 ','','')
						ENDIF
					ENDIF
				ENDIF
			ENDIF
		ENDIF
	ENDFOR

	*- Tipo de tarifa
	*- En nueva Produccion
	*- Prima de Tarifa  ='S'
	*- Tasa Manual = 'N'

	*- En suplementos
	*- PRIMA TARIFA ACTUAL = 'X'
	*- PRIMA ADQUIRIDA = 'S'
	*- Tasa MANUAL = 'N'
	*- Para Resolver esta porqueria del TariTasa


	IF !INLIST(VAL(.oUsua.entidad),2,14)
		IF toContenedor.oRiesgo.TariTasa='N'
			loError.inser_er("C00011","oEspRiesgo",'Emisin por Tasa','','')
		else
			loError.inser_er("V00240","oEspRiesgo",'La Emisin debe ser por Tasa','','')	
		ENDIF
	ENDIF


ENDWITH

ENDPROC
PROCEDURE habilitar_textolibre_en_bobo
lparameters toEsp
*- Habilita el texto libre en sup. bobos
with toEsp
	if .tratEspecial='026'
		retu .t.
	else
		retu .f.	
	endif	
endwith
ENDPROC
PROCEDURE _009_validacion
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC

* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos


LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Especfico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF

loEsp.CrearCursorGarantia()

*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !EMPTY(ra_cover) ;
	INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
	RETU
ENDIF

*- Validacion del los datos comunes al riesgo
THIS.val_riesgo(toContenedor,IIF(TYPE('toContenedorC')='O',toContenedorC,''))


WITH loEsp
	IF EMPTY(.Actividad)
		loError.inser_er("V00241","oEspRiesgo",'Cdigo de Actividad.  No puede estar vacio','','')
	ENDIF
*!*		IF EMPTY(.NombreActividad) 
*!*			loError.inser_er("V00241","oEspRiesgo",'Actividad.  No puede estar vacio','','')
*!*		ENDIF
	IF EMPTY(.desc_Riesgo)
		loError.inser_er("V00241","oEspRiesgo",'Descripcin del riesgo.  No puede estar vacio','','')
	ENDIF

	*- Mximo o Fijos
	if !inlist(loUsua.tipoperacion,'8') AND  empty(loEsp.maximo_fijo) or not inlist(loEsp.maximo_fijo,'1','2')
		loError.inser_er("V00241","oEspRiesgo",'Mximo o Fijos no puede debe ser 1 o 2','','')
	endif 
	

	*- Capital de Reaseguro
	IF !inlist(loUsua.tipoperacion,'8') AND  val(loUsua.nivel) < 9 and loEsp.capireas > 600000 
		loError.inser_er("C00021","oEspRiesgo","Capital de Reaseguro superior a 600.000",'','')
	endif
	
ENDWITH

ENDPROC
PROCEDURE _009_calcular_capital_reaseguro
LPARAMETERS toEsp, tcTipOperacion, tcCodPostRiesgo, tcTariTasa
WITH toEsp
	*- Recupera las posiciones de las Garantias
	FOR i=1 TO ALEN(.aGarantia,1)
		*-if .aGarantia(i,1)='073000'
		if inlist(.aGarantia(i,10),'C','K')
			.capireas = .capireas + .aGarantia(i,4)
		endif
	ENDFOR
		
endwith
ENDPROC
PROCEDURE _009_iniciar
LPARAMETERS toContenedor, tcTextoRamo

LOCAL;
	loEsp,  lnFila, lnElemento

lnFila		=0
lnElemento	=0
loEsp =	toContenedor.oApEsp


loEsp.Consorcio='0'


*- Cargar las garantias por defecto
THIS.CargarGarantiaObligatoria(loEsp)
ENDPROC
PROCEDURE v_ext_no_con
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC

* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos


LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Especfico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF

loEsp.CrearCursorGarantia()

*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !EMPTY(ra_cover) ;
	INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
	RETU
ENDIF

*- Verifica que las coberturas no tengan valores en el capital y en la prima
*!*	SELECT * FROM CurGarantia ;
*!*		WHERE ra_cobGar = 'C' AND (!EMPTY(CAPITAL) OR  !EMPTY(PRIMA)) ;
*!*		INTO CURSOR cTemp
*!*	IF _TALLY>0
*!*		loError.inser_er("V00240","oEspRiesgo",'Coberturas Contratadas, valores no vlidos','','')
*!*	ENDIF


*- Nro de garantas contratadas
*- Verifica que las garantas tengan capital  y prima
SELECT * FROM CurGarantia ;
	WHERE !INLIST(RA_COVER,'018019','018020') AND !EMPTY(RA_COVER) AND (EMPTY(CAPITAL) OR  EMPTY(PRIMA)) AND ra_cobGar # 'C';
	INTO CURSOR cTemp
IF _TALLY>0
	loError.inser_er("V00240","oEspRiesgo",'Garantas Contratadas, valores no vlidos','','')
	RETU
ENDIF

*!*	*- Valida que tenga consorcio si tiene alguna del 015 o 016
*!*	SELECT * FROM CurGarantia ;
*!*		WHERE INLIST(SUBSTR(RA_COVER,1,3),'015','016') ;
*!*		INTO CURSOR cTemp
*!*	IF _TALLY>0
*!*		SELECT * FROM CurGarantia ;
*!*			WHERE INLIST(RA_COVER,'018019','018020') ;
*!*			INTO CURSOR cTemp
*!*		IF 	_TALLY=0
*!*			loError.inser_er("V00240","oEspRiesgo",'Consorcio, Garanta no contratada','','')
*!*		ENDIF
*!*	ENDIF

*!*	*- Valida que tenga prima la garantia de consorcio
*!*	SELECT SUM(PRIMA) AS totPrima FROM CurGarantia ;
*!*		WHERE INLIST(RA_COVER,'018019','018020') INTO CURSOR cTemp
*!*	IF _TALLY#0
*!*		*- 	Tiene algn consorcio
*!*		IF cTemp.totPrima=0
*!*			*- No puso prima en la gara consorcio
*!*			loError.inser_er("V00240","oEspRiesgo",'Consorcio, la prima no puede ser 0','','')
*!*		ENDIF
*!*	ENDIF


ENDPROC
PROCEDURE _iniciar_gral
lparameters tcContenedor
local locontenedor, loEsp, loRiesgo

locontenedor=eval(tcContenedor)
loEsp=loContenedor.oApEsp
loRiesgo=loContenedor.ORIESGO                       

do case
	*- Para todos los ramos de agropecuaria pone "Sin revalorizacion"
	case inlist(loEsp.TratEspecial, '009','010','301','302','303','306','307','308','309','310','311','312')
		loContenedor.ORIESGO.tiporeval='09'
		loContenedor.ousua.impresion='L'
		loContenedor.oUsua.TipoImpresion='I'
endcase
ENDPROC
PROCEDURE _308_validar
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC

retu .t.

ENDPROC
PROCEDURE _309_validar
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC

retu .t.
ENDPROC
PROCEDURE _307_validar
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC

* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos


LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Especfico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF

*- Validacion del los datos comunes al riesgo
THIS.val_riesgo(toContenedor,IIF(TYPE('toContenedorC')='O',toContenedorC,''))

loEsp.CrearCursorGarantia()

*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !EMPTY(ra_cover) ;
	INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
	RETU
ENDIF


*- Valida que tenga prima la garantia de consorcio
SELECT SUM(PRIMA) AS totPrima FROM CurGarantia ;
	WHERE INLIST(RA_COVER,'018019','018020','018021') INTO CURSOR cTemp
IF _TALLY#0
	*- 	Tiene algn consorcio
	IF cTemp.totPrima=0
		*- No puso prima en la gara consorcio
		loError.inser_er("V00240","oEspRiesgo",'Consorcio, la prima no puede ser 0','','')
	ENDIF
ENDIF

*- Capital de Reaseguro
IF !inlist(loUsua.tipoperacion,'8') AND  val(loUsua.nivel) < 9 and loEsp.capireas > 300000 
	loError.inser_er("C00021","oEspRiesgo","Capital de Reaseguro superior a 300000",'','')
endif

if empty(alltrim(loEsp.actividad))
	loError.inser_er("V00241","oEspRiesgo",'Cdigo de Actividad no puede estar vacio','','')
endif

if empty(alltrim(loEsp.desc_riesgo))
	loError.inser_er("V00241","oEspRiesgo",'Descripcin del Riesgo no puede estar vacio','','')
endif
ENDPROC
PROCEDURE _303_validar
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC

* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos


LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Especfico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF
*- Validacion del los datos comunes al riesgo
THIS.val_riesgo(toContenedor,IIF(TYPE('toContenedorC')='O',toContenedorC,''))

loEsp.CrearCursorGarantia()


if empty(alltrim(loEsp.actividad))
	loError.inser_er("V00241","oEspRiesgo",'Cdigo de Actividad no puede estar vacio','','')
endif

if empty(alltrim(loEsp.desc_riesgo))
	loError.inser_er("V00241","oEspRiesgo",'Descripcin del Riesgo no puede estar vacio','','')
endif


*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !EMPTY(ra_cover) ;
	INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
	RETU
ENDIF


*- Valida que tenga prima la garantia de consorcio
SELECT SUM(PRIMA) AS totPrima FROM CurGarantia ;
	WHERE INLIST(RA_COVER,'018019','018020','018021') INTO CURSOR cTemp
IF _TALLY#0
	*- 	Tiene algn consorcio
	IF cTemp.totPrima=0
		*- No puso prima en la gara consorcio
		loError.inser_er("V00240","oEspRiesgo",'Consorcio, la prima no puede ser 0','','')
	ENDIF
ENDIF

	*- Mximo o Fijos
	if !inlist(loUsua.tipoperacion,'8') AND  empty(loEsp.maximo_fijo) or not inlist(loEsp.maximo_fijo,'1','2')
		loError.inser_er("V00241","oEspRiesgo",'Mximo o Fijos no puede debe ser 1 o 2','','')
	endif 
	
*- Capital de Reaseguro
IF !inlist(loUsua.tipoperacion,'8') AND  val(loUsua.nivel) < 9 and loEsp.capireas > 600000 
	loError.inser_er("C00021","oEspRiesgo","Capital de Reaseguro superior a 600000",'','')
endif


ENDPROC
PROCEDURE _306_validacion
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC

* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos


LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Especfico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF

*- Validacion del los datos comunes al riesgo
THIS.val_riesgo(toContenedor,IIF(TYPE('toContenedorC')='O',toContenedorC,''))

loEsp.CrearCursorGarantia()

*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !EMPTY(ra_cover) ;
	INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
	RETU
ENDIF


*- Valida que tenga prima la garantia de consorcio
SELECT SUM(PRIMA) AS totPrima FROM CurGarantia ;
	WHERE INLIST(ra_cover,'018019','018020','018021') INTO CURSOR cTemp
IF _TALLY#0
	*- 	Tiene algn consorcio
	IF cTemp.totPrima=0
		*- No puso prima en la gara consorcio
		loError.inser_er("V00240","oEspRiesgo",'Consorcio, la prima no puede ser 0','','')
	ENDIF
ENDIF

*- Mximo o Fijos
IF !INLIST(loUsua.tipoperacion,'8') AND  EMPTY(loEsp.maximo_fijo) OR NOT INLIST(loEsp.maximo_fijo,'1','2')
	loError.inser_er("V00241","oEspRiesgo",'Mximo o Fijos no puede debe ser 1 o 2','','')
ENDIF

*- control de central obligatorio
IF !INLIST(loUsua.tipoperacion,'8') AND  VAL(loUsua.nivel) < 9
	loError.inser_er("C00021","oEspRiesgo","Ramo 935",'','')
ENDIF

IF EMPTY(ALLTRIM(loEsp.actividad))
	loError.inser_er("V00241","oEspRiesgo",'Cdigo de Actividad no puede estar vacio','','')
ENDIF

IF EMPTY(ALLTRIM(loEsp.desc_riesgo))
	loError.inser_er("V00241","oEspRiesgo",'Descripcin del Riesgo no puede estar vacio','','')
ENDIF

ENDPROC
PROCEDURE _010_validacion
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC

* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos


LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
STORE .F. TO llError015000, llError016000

*- Especfico de Cartera
IF TYPE('toContenedorC')='O'
	loEspC = toContenedorC.oApEsp
ENDIF

*- Validacion del los datos comunes al riesgo
THIS.val_riesgo(toContenedor,IIF(TYPE('toContenedorC')='O',toContenedorC,''))

loEsp.CrearCursorGarantia()

*- Nro de garantas contratadas
SELECT * FROM CurGarantia ;
	WHERE !EMPTY(ra_cover) ;
	INTO CURSOR cTemp
IF _TALLY=0
	loError.inser_er("V00240","oEspRiesgo",'No Contrat ninguna Garanta','','')
	RETU
ENDIF


*- Valida que tenga prima la garantia de consorcio
SELECT SUM(PRIMA) AS totPrima FROM CurGarantia ;
	WHERE INLIST(RA_COVER,'018019','018020','018021') INTO CURSOR cTemp
IF _TALLY#0
	*- 	Tiene algn consorcio
	IF cTemp.totPrima=0
		*- No puso prima en la gara consorcio
		loError.inser_er("V00240","oEspRiesgo",'Consorcio, la prima no puede ser 0','','')
	ENDIF
ENDIF

	*- Mximo o Fijos
	if !inlist(loUsua.tipoperacion,'8') AND  empty(loEsp.maximo_fijo) or not inlist(loEsp.maximo_fijo,'1','2')
		loError.inser_er("V00241","oEspRiesgo",'Mximo o Fijos no puede debe ser 1 o 2','','')
	endif 

if empty(alltrim(loEsp.actividad))
	loError.inser_er("V00241","oEspRiesgo",'Cdigo de Actividad no puede estar vacio','','')
endif

if empty(alltrim(loEsp.desc_riesgo))
	loError.inser_er("V00241","oEspRiesgo",'Descripcin del Riesgo no puede estar vacio','','')
endif

*- Capital de Reaseguro
IF !inlist(loUsua.tipoperacion,'8') AND  val(loUsua.nivel) < 9 and loEsp.capireas > 150000 
	loError.inser_er("C00021","oEspRiesgo","Capital de Reaseguro superior a 150.000",'','')
endif
ENDPROC
PROCEDURE _026_calcular_creaseguro
LPARAMETERS toEsp, tcTipOperacion, tcCodPostRiesgo, tcTariTasa

*- El capital de reaseguro es:
*- Sumatorio de los capitales de renta mas el capital mayor de la 
*- indemnizacion inicial de fallecimiento e invalidez permanente absoluta
*- ENRIQUE MONDEJAR - 18-11-03

*- Crea el cursor de Garantias para usarlo en las validaciones
OldAlias=ALIAS()
toEsp.CrearCursorGarantia()

select sum(capital) as cap1 from curGarantia where ra_cover in('023060','023061') into cursor c1
select max(capital) as cap2 from curGarantia where ra_cover in('023024','023025') into cursor c2
toEsp.CAPIREAS=c1.cap1+c2.cap2
select (oldAlias)


ENDPROC
PROCEDURE _agro_tratarrecepcion
LPARAMETERS toContenedor

loRiesgo=toContenedor.oRiesgo
loEspRiesgo=toContenedor.oApEsp
loUsua=toContenedor.ousua
loEspRiesgo.Actividad=toContenedor.oRiesgo.GRUPORIES
loDbMdv001		= CREATEOBJECT('Mdvx010.emdw0001')

IF   	loRiesgo.INDDIVCOM="1" AND ;
		ALEN(loEspRiesgo.aGarantia,1)=1 AND ;
		INLIST(loEspRiesgo.TratEspecial,'009','010','303','306','312')
	*- Ramos de Agropecuaria diversos
	*- Es diversos y solo viene una cobertura, entonces debe ser la oficial si o si
	*- y aqu se fuerza la C porque en ocasiones llegarn K,L, solo para permitir respetar
	*- el texto que tiene la cobertura pe: UVA 24kg x dos barriles
	*- si se cambiar antes la letra, en el tratamiento se reemplazara por el texto original
	*- de la cobertura - 25/11/03
	*- loEspRiesgo.aGarantia(1,10)='C'

	llExisteCob=.F.
	FOR i = 1 TO ALEN (loEspRiesgo.aGarantia,1)
		IF loEspRiesgo.aGarantia(i,10) ='C'
			llExisteCob=.T.
			EXIT
		ENDIF
	ENDFOR

	IF !llExisteCob
		LOCAL ARRAY laTemp (ALEN(loEspRiesgo.aGarantia,1) , ALEN(loEspRiesgo.aGarantia,2))
		ACOPY (loEspRiesgo.aGarantia,laTemp)
		lcCodGar = loDbMdv001.Recuperar_oficial(loEspRiesgo.TratEspecial)
		THIS.Insertar_garantia( @laTemp, loEspRiesgo.Modalidad, loUsua.Ramo, lcCodGar , 0,0,0)
		DIME loEspRiesgo.aGarantia( ALEN(laTemp,1) , ALEN(laTemp,2))
		ACOPY (laTemp, loEspRiesgo.aGarantia)
	ENDIF

ENDIF

ENDPROC
PROCEDURE tratar_tespecial
lparameters taTespecial, taEnti, taRamo, taModalidad
*- Este mtodo se creo el 05/12/03 para solventar el caso de la entidad 10
*- Permite cambiar el tespecial segn alguna condicin, es llamado desde el 
*- comuni antes que haga cualquier cosa, por tanto cambiarlo aqu no tiene ningn riesgo.

do case
	case inlist(val(taTespecial)-500,009,010,301,302,303,306,307,308,309,310,311,312)
		*- Esto es as, porque a los ramos de la entidad 11 que son los que estn arriba
		*- se les sumo 500 al tespecial para crear los de la entidad 10
		taTespecial=PADL(alltrim(str(val(taTespecial)-500)),3,'0')
		
endcase

return taTespecial
ENDPROC
PROCEDURE _822_validacion
LPARAMETERS tcTipoTarifa, toContenedor, tcOpcion, toContenedorC

* tcOpcion : 'C' - cuando se llame al mtodo validar antes del clculo de prima
*			 'S' - desde la recepcin de operaciones para suscribir
*            .F. - en el resto de los casos


LOCAL;
	loEsp, loUsua, loError, loEspC, llError015000, llError016000

loEsp = toContenedor.oApEsp
loUsua =toContenedor.oUsua
loError = toContenedor.oError
ENDPROC
PROCEDURE _822_iniciar
LPARAMETERS toContenedor, tcTextoRamo

*- Inicia la sucursal
If toContenedor.oUsua.Entidad='02' 
	toContenedor.oapgeneral.SUBCENTRAL='92'
	toContenedor.oUsua.subcentral='92'
endif	

this.CargarGarantiaObligatoria(toContenedor.oApEsp)

ENDPROC
PROCEDURE wimpresion_opgrup
lparameters tcContenedor
toContenedor=eval(tcContenedor)
loEsp=toContenedor.oapEsp

do case
	case loEsp.tratEspecial='822'
		retu .f.
	otherwise
		retu .t.
endcase
ENDPROC
PROCEDURE wdestino_documento
lparameters tcContenedor
toContenedor=eval(tcContenedor)
loEsp=toContenedor.oapEsp

do case
	case loEsp.tratEspecial='822'
		retu .f.
	otherwise
		retu .t.
endcase
ENDPROC
PROCEDURE wcarta_cliente
lparameters tcContenedor
toContenedor=eval(tcContenedor)
loEsp=toContenedor.oapEsp

do case
	case loEsp.tratEspecial='822'
		retu .f.
	otherwise
		retu .t.
endcase

ENDPROC
PROCEDURE tienederecho_y_beneficiario
LPARAMETERS toEsp
DO CASE
	CASE inlist(toEsp.TratEspecial,'822')
		RETU .F.
	OTHERWISE
		RETU .T.
ENDCASE

ENDPROC
