ANC

1. Funções

Dicionário

carregar()

Metodo para carregar o arquivo de configuração.

Parametro:
caminho: Diretório onde fica o arquivo [nome_do_arquivo].ini
secao: Nome da secao que deseja fazer a leitura
item: Nome do item na seção

def carregar(self, caminho, secao, item):
config_objeto = ConfigParser()
config_objeto.read(f"{caminho}")
resultado = literal_eval(config_objeto.get(secao, item))
return resultado

checar()

Método para incluir as variaveis que não foram enviadas pela ANC.

Parametros:
dct: É o dicionário enviado pelo IIB como entrada
cst: É o dicionário de constantes

def checar(self, dct, cst):

for var in cst.keys():
if var not in dct.keys():
dct[var] = cst[var]

return dct

traduzir()

Método para traduzir os dados enviados pela ANC com nomes em português,
para o nome equivalente abreviado.

Parametros:

msg: É o dicionario enviado pelo IIB como entrada.
dct: Dicionario com o De-Para que desejamos transformar o dicionario de
entrada.

def traduzir(self, msg, dct):
dict_novo = {}
if (type(msg) is str):
msg_nova = literal_eval(msg)
for k, v in msg_nova.items():
dict_novo[dct[k]] = v
else:
for k, v in msg.items():
dict_novo[dct[k]] = v
return dict_novo

reescLista()

Método para reescrever as variaveis do tipo lista no book de entrada.
Parametros:
dct: É o dicionário enviado pelo IIB como entrada.

def reescLista(self, dct):
listas = ['listaEmpregadorCliente', 'listaEmpregadorComprometido', 'listaSublimiteRenovacao', \
'listaEmpregadorConsignacaoFolha', 'listaEmpregadorRegimeEspecial', 'listaConvenio']

chaves = ['codigoEmpregadorCliente', 'codigoNatureza', 'indicadorRegraRendimentoLiquidacao', 'valorRendimentoLiquido', \
'indicadorOcupacaoPrincipalSecundario', 'codigoOcupacaoEmpregadorCliente', 'dataInicioSecundario', \
'valorRendimento', 'dataRendimento', 'codigoEmpregadorComprometido', 'codigoSublimiteRenovacao', \
'codigoEmpregadorConsignacaoFolha', 'codigoEmpregadorRegimeEspecial', 'numeroClienteConvenio', \
'indiceAjusteConvenio', 'indiceMultiplicadorConvenio', 'quantidadeMaximoMesFinanciamento', \
'valorMaximoConvenio', 'valorMenorTaxaJuro', 'codigoSublimiteCredito', 'indiceReducaoPrestacao']

ch_exec = ['dataInicioSecundario', 'dataRendimento']

# Criando as listas vazias no dicionario
for ch in chaves:
dct[ch] = []

# Reescrevendo as listas no dicionario em novas listas
for lista in listas:
for dic in dct[lista]:
for ch in chaves:
if ch in dic:
if ch in ch_exec:
if ch == 'dataRendimento':
if dic[ch] != '':
nVal = dic[ch][6:10] + "-" + dic[ch][3:5] + "-" + dic[ch][0:2]
dct[ch].append(str(nVal))
else:
dct[ch].append('0001-01-01')
else:
if dic[ch] != '':
nVal = int(dic[ch])
dct[ch].append(nVal)
else:
dct[ch].append(0)
else:
dct[ch].append(dic[ch])
dct.pop(lista, None)

# #Garante que caso não venha um um campo da lista o vlaor '0' seja inserido
# for ch in chaves:
# if len(dct[ch]) == 0:
# dct[ch].append(0)
return dct

Saída

GeraSaida()

# 1. Identificação do Cliente

'cd_cli':
self.dicio['cd_cli'],
'nr_cpf_cnpj':
self.dicio['nr_cpf_cnpj']

# 2. Rotativo

2.1. Sublimites

'vl_slim_20_apvd': int(self.dicio['vl_slim_20_apvd']),
'vl_slim_20_clcd': int(self.dicio['vl_slim_20_clcd']),
'vl_slim_178_apvd': int(self.dicio['vl_slim_178_apvd']),
'vl_slim_178_clcd': int(self.dicio['vl_slim_178_clcd']),
'vl_slim_15_apvd': int(self.dicio['vl_slim_15_apvd']),
'vl_slim_15_clcd': int(self.dicio['vl_slim_15_clcd']),
'vl_slim_53_apvd': int(self.dicio['vl_slim_53_apvd']),
'vl_slim_53_clcd': int(self.dicio['vl_slim_53_clcd'])

2.2. Grupos

'vl_grupo_62_apvd': int(self.dicio['vl_grupo_62_apvd']),
'vl_grupo_62_clcd': int(self.dicio['vl_grupo_62_clcd']),
'vl_grupo_63_apvd': int(self.dicio['vl_grupo_63_apvd']),
'vl_grupo_63_clcd': int(self.dicio['vl_grupo_63_clcd'])

2.3. Bloco

'vl_bloco_11_apvd':
int(self.dicio['vl_bloco_11_apvd']),
'vl_bloco_11_clcd':
int(self.dicio['vl_bloco_11_clcd'])

# 3. Parcelado

3.1. Sublimilites

vl_slim_21_apvd': int(self.dicio['vl_slim_21_apvd']),
'vl_slim_21_clcd': int(self.dicio['vl_slim_21_clcd']),
'vl_slim_83_apvd': int(self.dicio['vl_slim_83_apvd']),
'vl_slim_83_clcd': int(self.dicio['vl_slim_83_clcd']),
'vl_slim_111_apvd': int(self.dicio['vl_slim_111_apvd']),
'vl_slim_111_clcd': int(self.dicio['vl_slim_111_clcd']),
'vl_slim_115_apvd': int(self.dicio['vl_slim_115_apvd']),
'vl_slim_115_clcd': int(self.dicio['vl_slim_115_clcd']),
'vl_slim_116_apvd': int(self.dicio['vl_slim_116_apvd']),
'vl_slim_116_clcd': int(self.dicio['vl_slim_116_clcd']),
'vl_slim_117_apvd': int(self.dicio['vl_slim_117_apvd']),
'vl_slim_117_clcd': int(self.dicio['vl_slim_117_clcd']),
'vl_slim_119_apvd': int(self.dicio['vl_slim_119_apvd']),
'vl_slim_119_clcd': int(self.dicio['vl_slim_119_clcd']),
'vl_slim_129_apvd': int(self.dicio['vl_slim_129_apvd']),
'vl_slim_129_clcd': int(self.dicio['vl_slim_129_clcd']),
'vl_slim_131_apvd': int(self.dicio['vl_slim_131_apvd']),
'vl_slim_131_clcd': int(self.dicio['vl_slim_131_clcd']),
'vl_slim_137_apvd': int(self.dicio['vl_slim_137_apvd']),
'vl_slim_137_clcd': int(self.dicio['vl_slim_137_clcd']),
'vl_slim_140_apvd': int(self.dicio['vl_slim_140_apvd']),
'vl_slim_140_clcd': int(self.dicio['vl_slim_140_clcd']),
'vl_slim_142_apvd': int(self.dicio['vl_slim_142_apvd']),
'vl_slim_142_clcd': int(self.dicio['vl_slim_142_clcd']),
'vl_slim_155_apvd': int(self.dicio['vl_slim_155_apvd']),
'vl_slim_155_clcd': int(self.dicio['vl_slim_155_clcd']),
'vl_slim_156_apvd': int(self.dicio['vl_slim_156_apvd']),
'vl_slim_156_clcd': int(self.dicio['vl_slim_156_clcd']),
'vl_slim_157_apvd': int(self.dicio['vl_slim_157_apvd']),
'vl_slim_157_clcd': int(self.dicio['vl_slim_157_clcd']),
'vl_slim_159_apvd': int(self.dicio['vl_slim_159_apvd']),
'vl_slim_159_clcd': int(self.dicio['vl_slim_159_clcd']),
'vl_slim_160_apvd': int(self.dicio['vl_slim_160_apvd']),
'vl_slim_160_clcd': int(self.dicio['vl_slim_160_clcd']),
'vl_slim_161_apvd': int(self.dicio['vl_slim_161_apvd']),
'vl_slim_161_clcd': int(self.dicio['vl_slim_161_clcd']),
'vl_slim_162_apvd': int(self.dicio['vl_slim_162_apvd']),
'vl_slim_162_clcd': int(self.dicio['vl_slim_162_clcd']),
'vl_slim_163_apvd': int(self.dicio['vl_slim_163_apvd']),
'vl_slim_163_clcd': int(self.dicio['vl_slim_163_clcd']),
'vl_slim_171_apvd': int(self.dicio['vl_slim_171_apvd']),
'vl_slim_171_clcd': int(self.dicio['vl_slim_171_clcd']),
'vl_slim_173_apvd': int(self.dicio['vl_slim_173_apvd']),
'vl_slim_173_clcd': int(self.dicio['vl_slim_173_clcd']),
'vl_slim_179_apvd': int(self.dicio['vl_slim_179_apvd']),
'vl_slim_179_clcd': int(self.dicio['vl_slim_179_clcd']),
'vl_slim_180_apvd': int(self.dicio['vl_slim_180_apvd']),
'vl_slim_180_clcd': int(self.dicio['vl_slim_180_clcd']),
'vl_slim_181_apvd': int(self.dicio['vl_slim_181_apvd']),
'vl_slim_181_clcd': int(self.dicio['vl_slim_181_clcd']),
'vl_slim_228_apvd': int(self.dicio['vl_slim_228_apvd']),
'vl_slim_228_clcd': int(self.dicio['vl_slim_228_clcd']),
'vl_pstc_cdc_apvd': int(self.dicio['vl_pstc_cdc_apvd']),
'vl_pstc_cdc_clcd': int(self.dicio['vl_pstc_cdc_clcd']),
'vl_pstc_fin_apvd': int(self.dicio['vl_pstc_fin_apvd']),
'vl_pstc_fin_clcd': int(self.dicio['vl_pstc_fin_clcd']),
'vl_pstc_rao_apvd': int(self.dicio['vl_pstc_rao_apvd']),
'vl_pstc_rao_clcd': int(self.dicio['vl_pstc_rao_clcd']),
'vl_pstc_vclo_apvd': int(self.dicio['vl_pstc_vclo_apvd']),
'vl_pstc_vclo_clcd': int(self.dicio['vl_pstc_vclo_clcd']),
'vl_pstc_cdc_prtt': int(self.dicio['vl_pstc_cdc_prtt']),
'vl_ren_slr_bnf': int(self.dicio['vl_ren_slr_bnf'])

3.2. Grupo

'vl_grupo_45_apvd': int(self.dicio['vl_grupo_45_apvd']),
'vl_grupo_45_clcd': int(self.dicio['vl_grupo_45_clcd']),
'vl_grupo_46_apvd': int(self.dicio['vl_grupo_46_apvd']),
'vl_grupo_46_clcd': int(self.dicio['vl_grupo_46_clcd']),
'vl_grupo_55_apvd': int(self.dicio['vl_grupo_55_apvd']),
'vl_grupo_55_clcd': int(self.dicio['vl_grupo_55_clcd']),
'vl_grupo_60_apvd': int(self.dicio['vl_grupo_60_apvd']),
'vl_grupo_60_clcd': int(self.dicio['vl_grupo_60_clcd']),
'vl_grupo_64_apvd': int(self.dicio['vl_grupo_64_apvd']),
'vl_grupo_64_clcd': int(self.dicio['vl_grupo_64_clcd']),
'vl_grupo_65_apvd': int(self.dicio['vl_grupo_65_apvd']),
'vl_grupo_65_clcd': int(self.dicio['vl_grupo_65_clcd'])

3.3. Bloco

'vl_bloco_14_apvd': int(self.dicio['vl_bloco_14_apvd']),
'vl_bloco_14_clcd': int(self.dicio['vl_bloco_14_clcd']),

# 4. Consignado

'vl_slim_130_apvd': int(self.dicio['vl_slim_130_apvd']),
vl_slim_130_clcd': int(self.dicio['vl_slim_130_clcd']),
'in_grava_cvn': self.dicio['in_grava_cvn'],
'vl_pstc_crd_slr': int(self.dicio['vl_pstc_083']),
'vl_ren_utzd_pstc_ecf': round(self.dicio['vl_ren_utzd_pstc_ecf'], 2),
'vl_renda_funci': round(self.dicio['vl_renda_funci'], 2),
'vl_renda_liq_ttl': round(self.dicio['vl_renda_liq_ttl'], 2),
'vl_renda_pres': round(self.dicio['vl_renda_pres'], 2),
'vl_pstc_ecf_clcd': int(self.dicio['vl_pstc_ecf_clcd']),
'vl_pstc_ecf_apvd': int(self.dicio['vl_pstc_ecf_apvd']),
'ic_ajst_cvn_137': int(self.dicio['ic_ajst_cvn_137']),
'vl_pstc_137': int(self.dicio['vl_pstc_137']),
'ic_ajst_cvn_171': int(self.dicio['ic_ajst_cvn_171']),
'vl_max_cvn_083': int(self.dicio['vl_max_cvn_083']),
'vl_max_cvn_137': int(self.dicio['vl_max_cvn_137']),
'vl_max_cvn_171': int(self.dicio['vl_max_cvn_171']),
'vl_pstc_fun_bb_clcd': int(self.dicio['vl_pstc_fun_bb_clcd']),
'vl_pstc_ecf_demais': int(self.dicio['vl_pstc_ecf_demais']),
'vl_pstc_fun_bb_apvd': int(self.dicio['vl_pstc_fun_bb_apvd']),
'ic_mtp_clc_slim_137': round(self.dicio['vl_mtp_clc_slim_137'], 6)

2. Rotativo

ProcRotativo

ProcessaRotativo()

Cálculos

calc_apvd_far

Método para calcular valor
aprovado e calculado com FAR.

# Instância

te = TratarErro(self.caminho)

# Valor Calculado e Aprovado com
FAR - Cheque Especial

try:
self.dicio["ws_vl_clcd_far_015"] =
self.dicio["vl_slim_15_clcd"] *
self.dicio["vl_ftr_ajst_slim_015"]
self.dicio["ws_vl_apvd_far_015"] =
self.dicio["vl_slim_15_apvd"] *
self.dicio["vl_ftr_ajst_slim_015"]
except:
te.getError('014')

# Cartão de Crédito

try:
self.dicio["ws_vl_clcd_far_020"] = self.dicio["vl_slim_20_clcd"] *
self.dicio["vl_ftr_ajst_slim_020"]
self.dicio["ws_vl_apvd_far_020"] = self.dicio["vl_slim_20_apvd"] *
self.dicio["vl_ftr_ajst_slim_020"]
except:
te.getError('015')

calc_perc_rot

# Calcula XYZ% do calculado 15/20 para uso do publico GT-FRAUDE

# o registro da planilha de Teste tem as variáveis cd_tip_cpvt_ren == 'C' e
in_rlc_cli == 'C'.
# Como as condições nao permitem a mudança do valor da variavel
waux_pc_clcd_rel, ela continua com o valor 0
# e zera o calculo do sublimite final.

# Instâncias

te = TratarErro(self.caminho)

# Variáveis

waux_pc_clcd_rel = 0

# Definindo o percentual a ser
aplicado de acordo com o tipo de
comprovante de renda e tipo de
relacionamento do cliente.

if self.dicio["cd_tip_cpvt_ren"] == 'F':
if self.dicio["in_rlc_cli"] == 'P':
waux_pc_clcd_rel = self.dicio["vl_pc_cpv_fmal_p"]

if self.dicio["in_rlc_cli"] == 'C':
waux_pc_clcd_rel = self.dicio["vl_pc_cpv_fmal_c"]

elif self.dicio["cd_tip_cpvt_ren"] == 'C':
if self.dicio["in_rlc_cli"] in ('I', '', ' ', ' '):

waux_pc_clcd_rel = self.dicio["vl_pc_ren_cpvd_i"]

if self.dicio["in_rlc_cli"] == 'P':

if self.dicio["cd_rsco_05"] in ('A', 'B'):
waux_pc_clcd_rel = self.dicio["vl_pc_ren_cpvd_p_ab"]


if self.dicio["cd_rsco_05"] in ('C', 'D'):
waux_pc_clcd_rel = self.dicio["vl_pc_ren_cpvd_p_cd"]

# Aplicando percentual de redução
- Cheque Especial

try:
self.dicio["wgda_vl_slim_15_clcd"] =
self.dicio["vl_slim_15_clcd"] * (waux_pc_clcd_rel / 100)

except:
te.getError('009')

# Aplicando percentual de redução
- Cartão de Crédito

try:
self.dicio["wgda_vl_slim_20_clcd"] =
self.dicio["vl_slim_20_clcd"] * (waux_pc_clcd_rel / 100)
except:
te.getError('010')

calculoAgrup

Método para calcular os valores
de agrupamentos

calcularGrupos()

# Instâncias

te = TratarErro(self.caminho)

# Inicialização das Variáveis

self.dicio["vl_grupo_62_clcd"] = 0
self.dicio["vl_grupo_62_apvd"] = 0
self.dicio["vl_grupo_63_clcd"] = 0
self.dicio["vl_grupo_63_apvd"] = 0

# Cheque Especial - Calculado e
Aprovado

try:
self.dicio["vl_grupo_62_clcd"] =
self.dicio["vl_slim_15_clcd"] +
self.dicio["vl_slim_53_clcd"]
self.dicio["vl_grupo_62_apvd"] =
self.dicio["vl_slim_15_apvd"] +
self.dicio["vl_slim_53_apvd"]
except:
te.getError('012')

# Cartão de Crédito - Calculado e
Aprovado

try:
self.dicio["vl_grupo_63_clcd"] =
self.dicio["vl_slim_20_clcd"] +
self.dicio["vl_slim_178_clcd"]
self.dicio["vl_grupo_63_apvd"] =
self.dicio["vl_slim_20_apvd"] +
self.dicio["vl_slim_178_apvd"]
except:
te.getError('013')

calcularBlocos()

def calcularBlocos(self):
self.dicio["vl_bloco_11_apvd"] = 0
self.dicio["vl_bloco_11_clcd"] = 0

if self.dicio["vl_grupo_62_clcd"] >= self.dicio["vl_grupo_63_clcd"]:
self.dicio["vl_bloco_11_clcd"] = self.dicio["vl_grupo_62_clcd"]
else:
self.dicio["vl_bloco_11_clcd"] = self.dicio["vl_grupo_63_clcd"]

if self.dicio["vl_grupo_62_apvd"] >= self.dicio["vl_grupo_63_apvd"]:
self.dicio["vl_bloco_11_apvd"] = self.dicio["vl_grupo_62_apvd"]

elif self.dicio["cd_crct_1682"] == 1:
self.dicio["vl_bloco_11_apvd"] = self.dicio["vl_grupo_63_apvd"]
else:
self.dicio["vl_bloco_11_apvd"] = self.dicio["vl_grupo_63_apvd"]

calculo_sublimite

calcLimRef()

Função para cálculo do Limite Referencial para os
produtos:
- Cartão de Crédito
- Cheque Especial

Parametros:
prd: Tipo do Produto que deseja calcular:
- CHQ - Cheque Especial
- CRT - Cartão de Crédito

# Instâncias

te = TratarErro(self.caminho)

# Variáveis de Entrada

fator_desemp = self.dicio["vl_ftr_demp"]
fator_relac = self.dicio["cd_ftr_rlc"]
renda = self.dicio['vl_rend_lqdo_ttl']

if prd == "CHQ":
coeficiente = self.dicio['vl_cfct_015']
limite_ref = self.dicio['vl_lim_ref_015']
else:
coeficiente = self.dicio['vl_cfct_020']
limite_ref = self.dicio['vl_lim_ref_020']

# Cálculo do limite referencial

try:
result = fator_desemp * fator_relac * coeficiente * renda
except:
te.getError('005')

# Validação

if result > limite_ref:
if prd == "CHQ":
self.dicio['vl_slim_15_clcd'], self.dicio['vl_slim_15_apvd'] = limite_ref, limite_ref
else:
self.dicio['vl_slim_20_clcd'], self.dicio['vl_slim_20_apvd'] = limite_ref, limite_ref
else:
if prd == "CHQ":
self.dicio['vl_slim_15_clcd'], self.dicio['vl_slim_15_apvd'] = int(result), int(result)
else:
self.dicio['vl_slim_20_clcd'], self.dicio['vl_slim_20_apvd'] = int(result), int(result)

Módulos

ancs0126

ancs0126()

# Instâncias

te = TratarErro(self.caminho)

# Variáveis

ancs0126_vl_rtv_apvc = self.anc0126['ancs0126_vl_rtv_clcd']

rv.recuperaVips(self)
if self.anc0126['ancs0126_in_sem_cta_cartao'] == 'S':
return 1

ancs0126_rc = rl.recuperaLimRotAnt(self)

if ancs0126_rc != 0:
return 1

# A. Clientes com caracteristica XX VIP, sem sinal de alerta
1 ou 2 e cujo rotativo anterior seja >= 500 e < 800

if self.anc0126['ancs0126_in_crct_xx'] == 'S' and self.anc0126['ancs0126_in_snl_alr'] not in (1, 2) \
and self.anc0126['ancs0126_vl_rtv_ant'] >= self.anc0126['ancs0126_vl_min_crt_unit'] \
and self.anc0126['ancs0126_vl_rtv_ant'] < self.anc0126['ancs0126_vl_max_crt_unit']:

if self.anc0126['ancs0126_cd_rsco_clcd'] > self.anc0126['ancs0126_cd_rsco_ant']:
self.anc0126['ancs0126_vl_rtv_apvc'] = self.anc0126['ancs0126_vl_rtv_ant']
else:
if self.anc0126['qtd_dias_anl_ant'] > 150:
try:
self.anc0126['ancs0126_vl_rtv_apvc'] = self.anc0126['ancs0126_vl_rtv_ant'] * 1.2
except:
te.getError('022')

if self.anc0126['ancs0126_vl_rtv_apvc'] > self.anc0126['ancs0126_vl_max_crt_unit']:
self.anc0126['ancs0126_vl_rtv_apvc'] = self.anc0126['ancs0126_vl_max_crt_unit']
return 0

# B. Clientes com caracteristica ZZ VIP, sem sinal de alerta
1 ou 2 e cujo rotativo anterior seja >= 500 e < 800

if self.anc0126['ancs0126_in_crct_zz'] == 'S' and self.anc0126['ancs0126_in_snl_alr'] not in (1, 2) \
and self.anc0126['ancs0126_vl_rtv_ant'] >= self.anc0126['ancs0126_vl_min_crt_unit'] \
and self.anc0126['ancs0126_vl_rtv_ant'] < self.anc0126['ancs0126_vl_max_crt_unit']:

if self.anc0126['ancs0126_cd_rsco_clcd'] <= self.anc0126['ancs0126_cd_rsco_ant']:
self.anc0126['ancs0126_vl_rtv_apvc'] = self.anc0126['ancs0126_vl_rtv_ant']
else:
if self.anc0126['ancs0126_vl_rtv_ant'] < self.anc0126['ancs0126_vl_maior_fat_vip']:
self.anc0126['ancs0126_vl_rtv_apvc'] = self.anc0126['ancs0126_vl_rtv_ant']
else:
self.anc0126['ancs0126_vl_rtv_apvc'] = self.anc0126['ancs0126_vl_maior_fat_vip']

if self.anc0126['ancs0126_vl_rtv_apvc'] < self.anc0126['ancs0126_vl_min_crt_unit']:
self.anc0126['ancs0126_vl_rtv_apvc'] = self.anc0126['ancs0126_vl_min_crt_unit']

return 0

# C. Clientes cujo rotativo estabelecido na analise anterior seja
inferior a 500,00 ou superior a 800,00: sera estabelecido o maior
entre: piso de 500,00, o calculado e o estabelecido anterior.

if self.anc0126['ancs0126_vl_rtv_ant'] < self.anc0126['ancs0126_vl_min_crt_unit'] or \
self.anc0126['ancs0126_vl_rtv_ant'] > self.anc0126['ancs0126_vl_max_crt_unit']:
if self.anc0126['ancs0126_vl_rtv_ant'] < self.anc0126['ancs0126_vl_rtv_clcd']:
self.anc0126['ancs0126_vl_rtv_apvc'] = self.anc0126['ancs0126_vl_rtv_clcd']
else:
self.anc0126['ancs0126_vl_rtv_apvc'] = self.anc0126['ancs0126_vl_rtv_ant']

if self.anc0126['ancs0126_vl_rtv_apvc'] <
self.anc0126['ancs0126_vl_min_crt_unit']:
self.anc0126['ancs0126_vl_rtv_apvc'] =
self.anc0126['ancs0126_vl_min_crt_unit']

return 0

# D. Clientes com sinal de alerta 1: será estabelecido o
valor do rotatvio anterior.

if self.anc0126['ancs0126_in_snl_alr'] == 1:
self.anc0126['ancs0126_vl_rtv_apvc'] =
self.anc0126['ancs0126_vl_rtv_ant']

if self.anc0126['ancs0126_vl_rtv_apvc'] <
self.anc0126['ancs0126_vl_min_crt_unit']:
self.anc0126['ancs0126_vl_rtv_apvc'] =
self.anc0126['ancs0126_vl_min_crt_unit']

return 0

# E. Clientes com sinal de alerta 2: será estabelecido o menor entre: I. O calculado
e o Piso de 500,00 (o que for maior) II. O limite rotativo anteior LIMITE ROTATIVO
ANTERIOR.

if self.anc0126['ancs0126_in_snl_alr'] == 2:
if self.anc0126['ancs0126_vl_rtv_clcd'] > self.anc0126['ancs0126_vl_min_crt_unit']:
self.anc0126['ancs0126_vl_rtv_apvc'] = self.anc0126['ancs0126_vl_rtv_clcd']

else:
self.anc0126['ancs0126_vl_rtv_apvc'] = self.anc0126['ancs0126_vl_min_crt_unit']

if self.anc0126['ancs0126_vl_rtv_apvc'] > self.anc0126['ancs0126_vl_rtv_ant']:
self.anc0126['ancs0126_vl_rtv_apvc'] = self.anc0126['ancs0126_vl_rtv_ant']

return 0

recuperaDadosVip()

Método responsável pela recuperação de
dados dos clientes pela subrotina VIPS0244

# Dicionario de Parametro para a
Função VIPS0244

self.anc0126['ancs0126_vl_maior_fat_vip'] = 0
self.anc0126['ancs0126_qt_utlz_vip'] = 0
self.anc0126['ancs0126_in_sem_cta_cartao'] = 'N'
self.anc0126['ancs0126_in_crct_xx'] = 'N'
self.anc0126['ancs0126_in_crct_zz'] = 'N'

# Realiza a consulta na subrotina
VIPS0244

vip.consultar(self)

if self.anc0126['ancs0126_in_sem_cta_cartao'] == 'N':

for i in range(0, 6):
if self.vips0244['vips0244_vl_soma_fat'][i] > self.anc0126['ancs0126_vl_maior_fat_vip']:
self.anc0126['ancs0126_vl_maior_fat_vip'] = self.vips0244['vips0244_vl_soma_fat'][i]

if self.vips0244['vips0244_vl_soma_fat'][i] > 0:
self.anc0126['ancs0126_qt_utlz_vip'] += 1
self.anc0126['ancs0126_vl_utlz_media_vip'] = self.vips0244['vips0244_vl_soma_fat'][i]

if self.anc0126['ancs0126_qt_utlz_vip'] > 0:
self.anc0126['ancs0126_vl_utlz_media_vip'] = self.anc0126['ancs0126_vl_utlz_media_vip'] /
self.anc0126['ancs0126_qt_utlz_vip']
else:
self.anc0126['ancs0126_vl_utlz_media_vip'] = 0

# Compõe Características XX e ZZ

if self.anc0126['ancs0126_vl_lim_ctr_vip'] == 0:
self.anc0126['ancs0126_pc_utlz_vip'] = 0
else:
self.anc0126['ancs0126_pc_utlz_vip'] = (self.anc0126['ancs0126_vl_utlz_media_vip'] * 100) / self.vips0244['vips0244_lim_ctrl']

if self.anc0126['ancs0126_pc_utlz_vip'] >= 80.00 and self.vips0244['vips0244_rfnt_ult_6m'] == 'N' and self.vips0244['vips0244_atr_ult_6m'] == 'N':
self.anc0126['ancs0126_in_crct_xx'] = 'S'

if self.anc0126['ancs0126_pc_utlz_vip'] < 80.00 and self.vips0244['vips0244_rfnt_ult_6m'] == 'S' and self.vips0244['vips0244_atr_ult_6m'] == 'S':
self.anc0126['ancs0126_in_crct_zz'] = 'S'
return 1

recuperaLimRot()

Método para recuperar a última
análise do cliente

# Instâncias

te = TratarErro(self.caminho)
self.DB2_USER = os.environ.get("DB2_USER")
self.DB2_PASSWORD =
os.environ.get("DB2_PASSWORD")
connID = Db2(self.DB2_USER, self.DB2_PASSWORD)

# Recuperamos a data da última
análise

try:
query1 = "SELECT TS_ACLT_SLC, CD_MTDL_ANL_CRD FROM DB2ANC.LMCR_CLI \
WHERE CD_CLI = {0} FETCH FIRST 1 ROW ONLY".format(self.anc0126['ancs0126_cd_cli'])
res1 = connID.query(query1, chunksize=None)
except:
te.getError('023')

if len(res1) == 0:
self.anc0126['ancs0126_qtd_dias_anl_ant'] = 0
self.anc0126['ancs0126_vl_rtv_ant'] = 0
self.anc0126['ancs0126_cd_rsco_ant'] = 0
else:
gda_ts_slct = str(res1['TS_ACLT_SLC'][0])
gda_cd_mtdl_anl_crd = res1['CD_MTDL_ANL_CRD'][0]

# Consulta Risco FEI da análise
anterior

try:
query2 = "SELECT CD_RSCO_PRVR_CLI FROM DB2ANC.SLCT_LMCR \
WHERE CD_CLI = {0} AND TS_ACLT_SLC = '{1}' FETCH FIRST 1 ROW ONLY".format(self.anc0126['ancs0126_cd_cli'], gda_ts_slct)

res2 = connID.query(query2, chunksize=None)
except:
te.getError('024')
if len(res2) == 0:
self.anc0126['ancs0126_qtd_dias_anl_ant'] = 0
self.anc0126['ancs0126_vl_rtv_ant'] = 0
self.anc0126['ancs0126_cd_rsco_ant'] = 0
else:
self.anc0126['ancs0126_cd_rsco_ant'] = res2['CD_RSCO_PRVR_CLI'][0]
try:
if gda_cd_mtdl_anl_crd > 50:
cd_slim_crd = 20
else:
cd_slim_crd = 143
query3 = "SELECT VL_SLIM_APVD FROM DB2ANC.SLIM_CRD_CLI \
WHERE CD_CLI = {0} AND CD_SLIM_CRD = {1} AND TS_ACLT_SLC = '{2}' \
FETCH FIRST 1 ROW ONLY".format(self.anc0126['ancs0126_cd_cli'], cd_slim_crd, gda_ts_slct)
res3 = connID.query(query3, chunksize=None)
except:
te.getError('025')
if len(res3) == 0:
self.anc0126['ancs0126_vl_rtv_ant'] = 0
else:
self.anc0126['ancs0126_vl_rtv_ant'] = res3['VL_SLIM_APVD'][0]
return 0

vips0244

vips0244()

# Procedimentos Iniciais

self.vips0244 = {}
self.vips0244['vips0244_gda_cur_date'] = datetime.now()
self.vips0244['vips0244_gda_mescur'] =
self.vips0244['vips0244_gda_cur_date'].month
self.vips0244['vips0244_gda_mescur_aux'] =
self.vips0244['vips0244_gda_cur_date'].month
self.vips0244['vips0244_gda_anocur_aux'] =
self.vips0244['vips0244_gda_cur_date'].year
self.vips0244['vips0244_vl_soma_fat'] = [0, 0, 0, 0, 0, 0]

# Pegar últimos 6 meses e joga em
uma lista

self.vips0244['vips0244_mm_inf'] = []
for i in range(1,7):
if self.vips0244['vips0244_gda_mescur_aux'] == 0:
self.vips0244['vips0244_gda_mescur_aux'] = 12
self.vips0244['vips0244_gda_anocur_aux'] = self.vips0244['vips0244_gda_anocur_aux'] - 1
self.vips0244['vips0244_mm_inf'].append(self.vips0244['vips0244_gda_mescur_aux'])
self.vips0244['vips0244_gda_mescur_aux'] = self.vips0244['vips0244_gda_mescur_aux'] - 1

# Verifica se o cliente possui conta
cartão

vcc.verificaContaCartao(self)

# Verifica se o cliente possui atraso
no pagamento da Conta Cartão

f self.anc0126['ancs0126_in_sem_cta_cartao'] == 'N':
# Verifica se o cliente possui atraso no pagamento da Conta Cartão
va.verificaAtraso(self)

return 1

verificaAtraso()

Método responsável por recuperar
os dados do contrato de conta
cartão e verificar se o cliente teve
atraso e refinanciamento nos
últimos 6 meses.

# Instâncias

te = TratarErro(self.caminho)

# Declaração de Variáveis

self.DB2_USER = os.environ.get("DB2_USER")
self.DB2_PASSWORD = os.environ.get("DB2_PASSWORD")

connID = Db2(self.DB2_USER, self.DB2_PASSWORD)
self.vips0244['vips0244_gda_prim'] = 'S'
self.vips0244['vips0244_rfnt_ult_6m'] = 'N'
self.vips0244['vips0244_atr_ult_6m'] = 'N'
self.gda_nr_seql_fat_ct_crt = 0
self.gda_vl_refinanc = 0

# Recupera dados da conta cartão
do cliente

try:
query = "SELECT DISTINCT A.NR_CT_CRT, A.DT_ABTR_CT, A.DT_FIM_CT, A.CD_TIP_RST_CRT_CRD, \
B.NR_SEQL_FAT_CT_CRT, C.VL_SDO_FAT_CT_CRT, C.CD_TIP_SDO, E.DT_PRVT_VNCT_FAT \
FROM DB2VIP.CT_CRT A, DB2VIP.FAT_CT_CRT B, DB2VIP.SDO_FAT_CT_CRT C, \
DB2VIP.TIP_SDO D, DB2VIP.CLDR_FATM E WHERE A.CD_CLI = {0} \
AND A.NR_CT_CRT = B.NR_CTR_OPR_CT_CRT AND B.NR_SEQL_FAT_CT_CRT = C.NR_SEQL_FAT_CT_CRT \
AND C.CD_TIP_SDO IN (03 , 05 , 101 , 107) AND D.CD_TIP_SDO IN (03 , 05 , 101 , 107) \
AND E.CD_CLDR_FATM = B.CD_CLDR_FATM AND E.DT_PRVT_VNCT_FAT >= (CURRENT DATE - 6 MONTH) \
AND E.DT_PRVT_VNCT_FAT <= (CURRENT DATE - 6 DAYS) AND E.CD_ORGZ_CT_CRT = 100 \
ORDER BY B.NR_SEQL_FAT_CT_CRT DESC, C.CD_TIP_SDO".format(self.anc0126['ancs0126_cd_cli'])

result = connID.query(query, chunksize=None)
except:
te.getError('028')

if len(result) == 0:
if self.vips0244['vips0244_gda_prim'] != 'N':

# Cliente sem faturas no período

self.anc0126['ancs0126_in_sem_cta_cartao'] = 'S'
return 1
else:
self.vips0244['vips0244_gda_prim'] = 'N'

for i in range(0, len(result)):
linha = result.to_dict(orient='records')[i]

# Recupera o tempo de atraso do
Pagamento da Conta Cartão

try:
query = "SELECT COUNT (*) AS GDA_COUNT FROM DB2VIP.ATR_PGTO_CT_CRT WHERE
NR_CT_CRT = {0} AND ( \
(MM_REF_ATR = MONTH(CURRENT DATE - 5 MONTH) AND AA_REF_ATR =
YEAR(CURRENT DATE - 5 MONTH)) OR \
(MM_REF_ATR = MONTH(CURRENT DATE - 4 MONTH) AND AA_REF_ATR =
YEAR(CURRENT DATE - 4 MONTH)) OR \
(MM_REF_ATR = MONTH(CURRENT DATE - 3 MONTH) AND AA_REF_ATR =
YEAR(CURRENT DATE - 3 MONTH)) OR \
(MM_REF_ATR = MONTH(CURRENT DATE - 2 MONTH) AND AA_REF_ATR =
YEAR(CURRENT DATE - 2 MONTH)) OR \
(MM_REF_ATR = MONTH(CURRENT DATE - 1 MONTH) AND AA_REF_ATR =
YEAR(CURRENT DATE - 1 MONTH)) OR \
(MM_REF_ATR = MONTH(CURRENT DATE) AND AA_REF_ATR = YEAR(CURRENT
DATE)))".format(linha['NR_CT_CRT'])

gda_atraso = connID.query(query, chunksize=None)['GDA_COUNT'][0]

# Marca se o cliente tem atraso nos
últimos 6 meses

if gda_atraso > 0:
self.vips0244['vips0244_atr_ult_6m'] = 'S'
except:
te.getError('029')

# Verifica o valor da fatura dos
últimos 6 meses

f linha['CD_TIP_SDO'] == 107:
for i in range(0, 6):
if self.vips0244['vips0244_mm_inf'][i] == linha['DT_PRVT_VNCT_FAT'].month:
self.vips0244['vips0244_vl_soma_fat'].append(linha['VL_SDO_FAT_CT_CRT'])
break

# Marca se o cliente tem
refinanciamento nos últimos 6
meses

if self.gda_nr_seql_fat_ct_crt != linha['NR_SEQL_FAT_CT_CRT']:
if self.gda_nr_seql_fat_ct_crt != 0:
if self.gda_vl_refinanc > 0:
self.vips0244['vips0244_rfnt_ult_6m'] = 'S'
self.gda_vl_refinanc = 0
self.gda_nr_seql_fat_ct_crt = linha['NR_SEQL_FAT_CT_CRT']

if linha['CD_TIP_SDO'] in (3, 5, 101):
self.gda_vl_refinanc = linha['VL_SDO_FAT_CT_CRT']

verificaContaCartão()

Método responsável por consultar se o cliente possui conta cartão
e o respectivo valor de limite contratado.

# Instâncias

te = TratarErro(self.caminho)

# Cria a conexão com o DB2

self.DB2_USER = os.environ.get("DB2_USER")
self.DB2_PASSWORD = os.environ.get("DB2_PASSWORD")

connID = Db2(self.DB2_USER, self.DB2_PASSWORD)

self.anc0126['ancs0126_in_sem_cta_cartao'] = 'S'
self.anc0126['ancs0126_vl_lim_ctr_vip'] = 0

# Verifica se o cliente possui conta
cartão

try:

query = "SELECT COUNT (*) as GDA_COUNT FROM DB2VIP.CT_CRT \
WHERE CD_CLI = {0} AND ((DT_FIM_CT = '01/01/0001') OR \
(DT_FIM_CT > CURRENT DATE - 6
MONTH))".format(self.anc0126['ancs0126_cd_cli'])
result = connID.query(query, chunksize=None)['GDA_COUNT'][0]

if result == 0:
self.anc0126['ancs0126_in_sem_cta_cartao'] = 'S'
else:
self.anc0126['ancs0126_in_sem_cta_cartao'] = 'N'
except:
te.getError('026')

# Recupera o Limite Contratado do
cliente com conta cartão

if self.anc0126['ancs0126_in_sem_cta_cartao'] == 'N':
try:
query = "SELECT VL_LIM_CLI_PF, VL_LIM_RTV_CLI_PF FROM
DB2VIP.LIM_CLI_PF \
WHERE CD_CLI_PF = {0}".format(self.anc0126['ancs0126_cd_cli'])

self.anc0126['ancs0126_vl_lim_ctr_vip'] = connID.query(query,
chunksize=None)['VL_LIM_RTV_CLI_PF'][0]

except:
te.getError('027')

Regras

aplicaSnlAlerta()

Função para Aplicação de Sinal de Alerta para os produtos:
- Cartão de Crédito
- Cheque Especial

Parametros:
prd: Tipo do Produto que deseja calcular:
- CHQ - Cheque Especial
- CRT - Cartão de Crédito

# Aplicação de Sinal de Alerta para
Cheque Especial
Regra 1 - Sinal 0

if self.dicio['cd_snl_avs_chq_espl'] == 0:
if (self.dicio['ind_pbco_min'] == 'N') and (self.dicio['ind_pbco_fraude'] == 'N'):
if self.dicio['in_lim_ant'] == "N":
self.dicio['vl_slim_15_ant'] = 0

if self.dicio['vl_slim_15_ant'] > self.dicio['vl_slim_15_clcd']:

self.dicio['vl_slim_15_apvd'] = self.dicio['vl_slim_15_ant']

else:
self.dicio['vl_slim_15_apvd'] = self.dicio['vl_slim_15_clcd']

# Regra 2 - Sinal 1

if self.dicio['cd_snl_avs_chq_espl'] == 1:
if self.dicio['in_lim_ant'] == "N":
self.dicio['vl_slim_15_apvd'] =
self.dicio['vl_slim_15_clcd']
else:
self.dicio['vl_slim_15_apvd'] =
self.dicio['vl_slim_15_ant']

# Regra 3 - Sinal 2, 5 e 6

if self.dicio['cd_snl_avs_chq_espl'] in (2,5,6):
if self.dicio['in_lim_ant'] == "N":
self.dicio['vl_slim_15_apvd'] = self.dicio['vl_slim_15_clcd']
else:
if self.dicio['vl_slim_15_ant'] < self.dicio['vl_slim_15_clcd']:
self.dicio['vl_slim_15_apvd'] = self.dicio['vl_slim_15_ant']
else:
self.dicio['vl_slim_15_apvd'] = self.dicio['vl_slim_15_clcd']

# Regra 4 - Sinal 4

if self.dicio['cd_snl_avs_chq_espl'] == 4:
self.dicio['vl_slim_15_apvd'] = self.dicio['vl_slim_15_clcd'] *
self.dicio['vl_pc_red_lim_clcd']

# Aplicação de Sinal de Alerta para
Cartão de Crédito
Regra 1 - Sinal 0

if self.dicio['cd_snl_avs_crt_crd'] == 0:
if (self.dicio['ind_pbco_min'] == 'N') and (self.dicio['ind_pbco_fraude'] == 'N'):
if self.dicio['vl_slim_20_ant'] > self.dicio['vl_slim_20_clcd']:
self.dicio['vl_slim_20_apvd'] = self.dicio['vl_slim_20_ant']
else:
self.dicio['vl_slim_20_apvd'] = self.dicio['vl_slim_20_clcd']

# Regra 2 - Sinal 1

if self.dicio['cd_snl_avs_crt_crd'] == 1:
self.dicio['vl_slim_20_apvd'] =
self.dicio['vl_slim_20_ant']

# Regra 3 - Sinal 2, 5 e 6

if self.dicio['cd_snl_avs_crt_crd'] in (2,5,6):
if self.dicio['vl_slim_20_ant'] < self.dicio['vl_slim_20_clcd']:
self.dicio['vl_slim_20_apvd'] = self.dicio['vl_slim_20_ant']
else:
self.dicio['vl_slim_20_apvd'] = self.dicio['vl_slim_20_clcd']

# Regra 4 - Sinal 4

if self.dicio['cd_snl_avs_crt_crd'] == 4:
self.dicio['vl_slim_20_apvd'] =
self.dicio['vl_slim_20_clcd'] *
self.dicio['vl_pc_red_lim_clcd']

aplicaTeto()

Metodo para calcular o teto dos valores dos sublimites de
acordo com a renda parametrizada de 40% e 80%.

# Instancias
te = TratarErro(self.caminho)

if wgda_vlr_rndm_lqdo_total <= wgda_vl_pc40_rnd_parm_teto:
try:
wgda_teto_slim_15 = wgda_vlr_rndm_lqdo_total * 1
wgda_teto_slim_20 = wgda_vlr_rndm_lqdo_total * 1
except:
te.getError('007')

elif wgda_vlr_rndm_lqdo_total <= wgda_vl_pc80_rnd_parm_teto:
try:
wgda_teto_slim_15 = wgda_vlr_rndm_lqdo_total * 1.5
wgda_teto_slim_20 = wgda_vlr_rndm_lqdo_total * 1.5
except:
te.getError('008')

else:
wgda_teto_slim_15 = 0
wgda_teto_slim_20 = 0


return wgda_teto_slim_15, wgda_teto_slim_20

apurarTeto()

if self.dicio["cd_sgm_anl"] == 39 or self.dicio["in_bco_pstl"] == "S":

if (self.dicio["vl_slim_15_clcd"] * 0.5) > (self.dicio["vl_slim_15_ant"] * 0.5):
wgda_teto_slim_15 = self.dicio["vl_slim_15_clcd"] * 0.5
else:
wgda_teto_slim_15 = self.dicio["vl_slim_15_ant"] * 0.5

if (self.dicio["vl_slim_20_clcd"] * 0.5) > (self.dicio["vl_slim_20_ant"] * 0.5):
wgda_teto_slim_20 = self.dicio["vl_slim_20_clcd"] * 0.5
else:
wgda_teto_slim_20 = self.dicio["vl_slim_20_ant"] * 0.5

elif (self.dicio['cd_ntz_ocp'] in (4, 5, 6, 8)) or \
(self.dicio['cd_ntz_ocp'] == 13 and self.dicio["cd_ocp"] in (271, 272, 273, 310, 330)):
if self.dicio['cd_rsco_05'] in ("C", "D") or self.dicio['qt_tmp_ct_ano'] < 7:
wgda_teto_slim_15, wgda_teto_slim_20 = aplicarTeto(wgda_vlr_rndm_lqdo_ttl,
self.dicio["wgda_vl_pc40_rnd_parm_teto"],
self.dicio["wgda_vl_pc80_rnd_parm_teto"])
else:
wgda_teto_slim_15, wgda_teto_slim_20 = aplicarTeto(wgda_vlr_rndm_lqdo_ttl,
self.dicio["wgda_vl_pc40_rnd_parm_teto"],
self.dicio["wgda_vl_pc80_rnd_parm_teto"])

return wgda_teto_slim_15, wgda_teto_slim_20

clienteUniversitario

# Preparando Variáveis de Entrada
para a Função ANCS0126

self.anc0126 = {}
self.anc0126['ancs0126_funcao'] = 1
self.anc0126['ancs0126_cd_cli'] = self.dicio['cd_cli']
self.anc0126['ancs0126_cd_tip_pss'] = self.dicio['cd_tip_pss']
self.anc0126['ancs0126_cd_rsco_clcd'] = self.dicio['cd_rsco_05']
self.anc0126['ancs0126_mtdl_anl_crd'] =
self.dicio['cd_mtdl_anl_crd']
self.anc0126['ancs0126_vl_rtv_clcd'] =
self.dicio['vl_slim_20_clcd']
self.anc0126['ancs0126_vl_rtv_apvc'] = 0
self.anc0126['ancs0126_vl_min_crt_unit'] =
self.dicio['vl_min_crt_unit']
self.anc0126['ancs0126_vl_max_crt_unit'] =
self.dicio['vl_max_crt_unit']

# Recupera o maior entre os Sinais
de Alerta de Cartão de Crédito e
Cheque Especial

if self.dicio['cd_snl_avs_crt_crd'] > self.dicio['cd_snl_avs_chq_espl']:
self.anc0126['ancs0126_in_snl_alr'] = self.dicio['cd_snl_avs_crt_crd']
else:
self.anc0126['ancs0126_in_snl_alr'] = self.dicio['cd_snl_avs_chq_espl']

# Chamada para a SubRotina
ANCS0126

ancs0126_rc = anc.ancs0126(self)
if ancs0126_rc != 0:
pass

# Regra 1 - Cheque Especial
Universitário

if self.dicio['vl_slim_15_clcd'] <
self.dicio['vl_min_chq_unit']:
self.dicio['vl_slim_15_clcd'] =
self.dicio['vl_min_chq_unit']
self.dicio['vl_slim_15_apvd'] =
self.dicio['vl_min_chq_unit']
else:
self.dicio['vl_slim_15_apvd'] =
self.dicio['vl_slim_15_clcd']

# Regra 2 - Cartão de Crédito
Universitário

if self.dicio['vl_slim_20_clcd'] < self.dicio['vl_min_crt_unit']:
self.dicio['vl_slim_20_clcd'] = self.dicio['vl_min_crt_unit']
self.dicio['vl_slim_20_apvd'] = self.dicio['vl_min_crt_unit']
else:
self.dicio['vl_slim_20_apvd'] = self.dicio['vl_slim_20_clcd']

if self.anc0126['ancs0126_vl_rtv_apvc'] > self.dicio['vl_slim_20_apvd']:
self.dicio['vl_slim_20_apvd'] = self.anc0126['ancs0126_vl_rtv_apvc']

limiteMinimo()

limMinimo

# Inclusão regra aprovado ou autorizado, baseando-se na variavel: self.dicio['cd_status_cli']
if self.dicio['cd_status_cli'] == 2 or self.dicio['cd_status_cli'] == 1 :
if (self.dicio['vl_slim_20_clcd'] <= self.dicio['vl_min_crt_lmt']) and \
(self.dicio['vl_rend_lqdo_ttl'] >= self.dicio['vl_rnd_min_crt_lmt']) and \
(self.dicio['vl_rend_lqdo_ttl'] <= self.dicio['vl_rnd_max_crt_lmt']):

self.dicio['vl_slim_15_clcd'] = 0
self.dicio['vl_slim_20_clcd'] = 0
self.dicio['vl_slim_53_clcd'] = 0
self.dicio['vl_slim_178_clcd'] = 0

self.dicio['vl_slim_20_apvd'] = self.dicio['vl_min_crt_lmt']
self.dicio['ind_pbco_min'] = 'S'

if self.dicio['vl_rend_lqdo_ttl'] > self.dicio['vl_rnd_min_chq_lmt']:
if self.dicio['vl_slim_20_clcd'] < self.dicio['vl_min_crt_lmt']:
self.dicio['vl_slim_20_apvd'] = self.dicio['vl_max_crt_lmt']
self.dicio['ind_pbco_min'] = 'S'
if self.dicio['vl_slim_15_clcd'] < self.dicio['vl_min_chq_lmt']:
self.dicio['vl_slim_15_apvd'] = self.dicio['vl_min_chq_lmt']
self.dicio['ind_pbco_min'] = 'S'

procedimentos()

procIniciais()

# Instancias

# Instancias
te = TratarErro(self.caminho)

PERC_40 = 0.40
PERC_80 = 0.80

# Cheque Especial

# Cheque Especial
try:
self.dicio['vl_slim_15_ant'] =
int(self.dicio['vl_slim_15_ant'])
except:
te.getError('001')

# Cartão de Crédito

# Cartão de Crédito
try:

self.dicio['vl_slim_20_ant'] =
int(self.dicio['vl_slim_20_ant'])
except:
te.getError('002')

#Calculo de 40% e 80% da renda
parametrizada

# Calculo de 40% e 80% da renda
parametrizada

try:
self.dicio['wgda_vl_pc40_rnd_parm_teto']
= self.dicio['vl_ren_prtz_teto'] * PERC_40
except:
te.getError('003')

try:
self.dicio['wgda_vl_pc80_rnd_parm_teto']
= self.dicio['vl_ren_prtz_teto'] * PERC_80
except:
te.getError('004')

# Cheque Especial

# Cheque Especial
self.dicio['vl_slim_15_clcd'] =
self.dicio['vl_slim_15_ant']
self.dicio['vl_slim_15_apvd'] =
self.dicio['vl_slim_15_ant']

# Cartão de Crédito

# Cartão de Crédito
self.dicio['vl_slim_20_clcd'] =
self.dicio['vl_slim_20_ant']
self.dicio['vl_slim_20_apvd'] =
self.dicio['vl_slim_20_ant']

#
self.dicio['vl_slim_53_clcd'] =
self.dicio['vl_slim_53_ant']
self.dicio['vl_slim_53_apvd'] =
self.dicio['vl_slim_53_ant']

#
self.dicio['vl_slim_178_clcd'] =
self.dicio['vl_slim_178_utzd']
self.dicio['vl_slim_178_apvd'] =
self.dicio['vl_slim_178_utzd']

self.dicio['ind_pbco_min'] = 'N'

procFinais()

# Procedimentos Finais

limite_minimo = False
factor = DBFactor(self.caminho)
conn = factor.getConnect()
if self.dicio["cd_tip_bnf"] == 4:
crit_015 = 7008
crit_020 = 7009
else:
crit_015 = 7011
crit_020 = 7012

# Carregando a query de consulta
no DB2

fd = open(self.caminho + "/configuracao/query_procFinais.sql", 'r')
sql_file = fd.read()
fd.close()

# Recupera o valor mínimo
aprovado para Cheque Especial

query_015 = sql_file.format(crit_015)
gda_vl_min_015 = factor.getResult(conn, query_015)[0][3]
gda_vl_min_chq_apvd_015 = float(gda_vl_min_015.replace(',', '.'))

# Recupera o valor mínimo
aprovado para Cartão de Crédito

query_020 = sql_file.format(crit_020)
gda_vl_min_020 = factor.getResult(conn, query_020)[0][3]
gda_vl_min_crt_apvd_020 = float(gda_vl_min_020.replace(',', '.'))

if self.dicio['cd_crct_1682'] == 1:
self.dicio['vl_slim_15_apvd'] = 0
self.dicio['vl_slim_178_apvd'] = 0
self.dicio['vl_slim_53_apvd'] = 0
self.dicio['vl_grupo_62_apvd'] = 0

if self.dicio['vl_slim_15_apvd'] > 0 and \
self.dicio['vl_slim_15_apvd'] < gda_vl_min_chq_apvd_015:
self.dicio['vl_slim_15_apvd'] = gda_vl_min_chq_apvd_015
self.dicio['vl_grupo_62_apvd'] = gda_vl_min_chq_apvd_015
limite_minimo = True

if self.dicio['vl_slim_20_apvd'] > 0 and \
self.dicio['vl_slim_20_apvd'] < gda_vl_min_crt_apvd_020:

self.dicio['vl_slim_20_apvd'] = gda_vl_min_crt_apvd_020
self.dicio['vl_grupo_63_apvd'] = gda_vl_min_crt_apvd_020
limite_minimo = True

if limite_minimo:
if self.dicio['vl_grupo_62_apvd'] > self.dicio['vl_grupo_63_apvd']:
self.dicio['vl_bloco_11_apvd'] = self.dicio['vl_grupo_62_apvd']
else:
self.dicio['vl_bloco_11_apvd'] = self.dicio['vl_grupo_63_apvd']

PublicoGeral()

# Calculo do Limite Referencial

calcLimRef(self, "CHQ")
calcLimRef(self, "CRT")

# Verifica Público do Grupo de Trabalho de Fraude

verifGTFraude(self)

# Regra do Limite Minimo

if (self.dicio['in_bco_pstl'] == 'N') and (self.dicio['in_unit'] == 'N') and
(self.dicio['ind_pbco_fraude'] == 'N'):
limMinimo(self)

# Regra Renda até 2.500,00

if (self.dicio['ind_pbco_min'] == 'N') and (self.dicio['cd_sgm_anl'] == 55) and \
(self.dicio['in_bco_pstl'] == "N") and (self.dicio['in_unit'] == 'N'):
renda2500(self)

# Clientes Universitários

if self.dicio['in_unit'] == 'S':
uni.cliente_universitario(self)

# Aplica Sinal Alerta

aplicSnlAlerta(self, "CHQ")
aplicSnlAlerta(self, "CRT")
calc_apvd_far(self)

# Validação Limite Anterior e Teto -
Cartão de Crédito

if (self.dicio['vl_slim_20_ant'] <= self.dicio['vl_lim_ref_020']):
if self.dicio['vl_slim_20_apvd'] > self.dicio['vl_lim_ref_020']:
self.dicio['vl_slim_20_apvd'] = self.dicio['vl_lim_ref_020']

if (self.dicio['wgda_teto_slim_20'] > 0) and \
(self.dicio['vl_slim_20_apvd'] > self.dicio['wgda_teto_slim_20']):
self.dicio['vl_slim_20_apvd'] = self.dicio['wgda_teto_slim_20']
else:
self.dicio['vl_slim_20_apvd'] = self.dicio['ws_vl_apvd_far_020']

# Validação Limite Anterior e Teto -
Cheque Especial

if (self.dicio['vl_slim_15_ant'] <= self.dicio['vl_lim_ref_015']):
if self.dicio['vl_slim_15_apvd'] > self.dicio['vl_lim_ref_015']:
self.dicio['vl_slim_15_apvd'] = self.dicio['vl_lim_ref_015']

if (self.dicio['wgda_teto_slim_15'] > 0) and \
(self.dicio['vl_slim_15_apvd'] > self.dicio['wgda_teto_slim_15']):
self.dicio['vl_slim_15_apvd'] = self.dicio['wgda_teto_slim_15']
else:
self.dicio['vl_slim_15_apvd'] = self.dicio['ws_vl_apvd_far_015']

# Calcula o Grupos e Blocos

a.calcularGrupos(self)
ca.calcularBlocos(self)

raoSemPont()

#Início Clientes com RAO sem
pontualidade

# Variáveis de entrada

in_anot = self.dicio['in_anot']
in_ptdd = self.dicio['in_ptdd']
in_ctr_rao = self.dicio['in_ctr_rsct']
in_ctra_52_18 = self.dicio['in_ctra_52_18']

# Clientes com RAO sem
pontualidade

self.dicio['vl_slim_15_clcd'] =
self.dicio['vl_lim_clcd_rsct']
self.dicio['vl_slim_20_clcd'] =
self.dicio['vl_lim_clcd_rsct']
self.dicio['vl_slim_15_apvd'] =
self.dicio['vl_lim_clcd_rsct']
self.dicio['vl_slim_20_apvd'] =
self.dicio['vl_lim_clcd_rsct']

# Os valores de estabelecimento
para clientes com reescalonamento
são atribuídos no modulo
ANCNS527

renda2500(self)

if self.dicio['wgda_teto_slim_15'] > 0 and \
self.dicio['vl_slim_15_apvd'] > self.dicio['wgda_teto_slim_15']:
self.dicio['vl_slim_15_apvd'] = self.dicio['wgda_teto_slim_15']

if self.dicio['wgda_teto_slim_20'] > 0 and \ self.dicio['vl_slim_20_apvd'] >
self.dicio['wgda_teto_slim_20']: self.dicio['vl_slim_20_apvd'] =
self.dicio['wgda_teto_slim_20']

calc_apvd_far(self)

if self.dicio['wgda_teto_slim_15'] == 0:
self.dicio['vl_slim_15_apvd'] = self.dicio['ws_vl_apvd_far_015']

if self.dicio['wgda_teto_slim_20'] == 0:
self.dicio['vl_slim_20_apvd'] = self.dicio['ws_vl_apvd_far_020']

ca.calcularGrupos(self)
ca.calcularBlocos(self)

renda2500()

# Instâncias

te = TratarErro(self.caminho)

# Variáveis de Entrada

self.dicio['wgda_vl_ren_brto_cnvd'] = self.dicio['vl_ren_brto']

if (self.dicio['in_pgt'] == 1 or self.dicio['in_inss'] == 'S'):
if self.dicio['vl_ren_brto'] == 0:
try:
self.dicio['wgda_vl_ren_brto_cnvd'] = self.dicio['vl_rend_lqdo_ttl'] * 1.25

except:
te.getError('011')

if (self.dicio['wgda_vl_ren_brto_cnvd'] <= self.dicio['vl_ren_prtz_teto']) and \
(self.dicio['vl_rend_lqdo_ttl'] <= self.dicio['vl_ren_prtz_teto']) or \
(self.dicio['in_bco_pstl'] == 'S' and self.dicio['wgda_vl_ren_brto_cnvd'] <=
self.dicio['vl_ren_prtz_teto']):

self.dicio['wgda_teto_slim_15'],
self.dicio['wgda_teto_slim_20'],
self.dicio['wgda_vlr_rndm_lqdo_total'] = recomporRendaLqda(self)

recomporRendaLqda()

# Instância

te = TratarErro(self.caminho)

# Variáveis de Entrada

vl_utzd_consig_bb = self.dicio["vl_utzd_consig_bb"]
vl_utzd_consig_sfn = self.dicio["vl_utzd_consig_sfn"]

# Variáveis Auxiliares

wgda_vlr_rndm_lqdo_total =
self.dicio["vl_rend_lqdo_ttl"]
self.dicio["wgda_teto_slim_15"] = 0
self.dicio["wgda_teto_slim_20"] = 0

# Alteração Condição variável nível
88

if self.dicio["in_pgt"] == 1 or self.dicio["in_inss"] == 1:
try:
wgda_vlr_rndm_lqdo_total = (self.dicio["vl_rend_lqdo_ttl"] + \
vl_utzd_consig_bb + \
vl_utzd_consig_sfn)
except:
te.getError('006')

if wgda_vlr_rndm_lqdo_total <= self.dicio["vl_ren_prtz_teto"]:
self.dicio["wgda_teto_slim_15"], self.dicio["wgda_teto_slim_20"] =
apurarTeto(wgda_vlr_rndm_lqdo_total)

return wgda_teto_slim_15, wgda_teto_slim_20, wgda_vlr_rndm_lqdo_total

verifGtFraude()

Caso possua indicador de GT FRAUDE retorna uma lista com o indicador de público fraude
e o resultado do cálculo de limites.

Nos casos em que o cliente comprou renda de próprio punho e in_rlc_cli estiver em ('I', ' ')
os procedimentos_finais serão executados para cálculo do limite e retornados. Neste caso, a rotina que
estiver consumindo chamando função deverá retornar o resultado e finalizar a execução do programa.

Retorna:
* None: Quando in_frd não estiver em ("a", "A") ou
pbco_gt_fraudes igual a diferente de "S"
* List[str, None]: Quando não for detectado como público de fraude e os limites não forem
calculados.
* List[str, dict]: Quando cd_tip_cpvt_ren == 'F' e in_rlc_cli em ('I', ' ')
* List[str, tuple]: Demais casos (limite calculado)

# Instância

# Trata Cliente como
relacionamento completo caso
renda Liquida.

# Renda comprovação formal do
cliente (próprio punho).

# Renda comprovada (proventista ou não)

# Medida alternativa de declaração
quando o ir_frd não estiver ativa.

executar()

1.Cliente Anotação 348

if self.dicio['in_cli_anot_348'] == "S"
and self.dicio['in_cli_adpc_rhbl'] != 1:

2. Cliente Banco Postal

elif (self.dicio['in_bco_pstl'] == "S" and
self.dicio['cd_mtdl_anl_crd'] == 53 and \
self.dicio['cd_tip_bnf'] == 4) or
(self.dicio['in_bco_pstl'] == "S" and \
self.dicio['cd_sgm_anl'] == 55):

3. Cliente com Anotação igual a 4

elif self.dicio['in_anot'] == 4:

4. Clientes Reescalonamento

elif self.dicio['in_ctra_349'] == "S":

5. Cliente com Produto da Linha
7326

elif self.dicio['in_ctra_349_12'] ==
"S":

6. Clientes com RAO sem
Pontualidade

elif self.dicio['in_ctra_52_18'] == 1
or self.dicio['in_anot'] == 3 or \
(self.dicio['in_ctr_rsct'] == 1 and
self.dicio['in_ptdd'] == "N"):
rsp.raoSemPont(self)

7. Público Geral

else:
pbl.publicoGeral(self)

8. Regra de Redutor do Cartão de
Crédito (HU 507390)

Realizando Consultas

# Cria conexão

factor = DBFactor(self.caminho)
conn = factor.getConnect()

# Envia valores padrão para query

n_crrt = 7017
sem_prov_bb = 7018
renda_disp = 7019
renda_dcld = 7020

# Carrega a query de consulta no
DB2

fd = open(self.caminho +
"/configuracao/query_redutor_cartao_credito.sql",
'r')
sql_file = fd.read()
fd.close()

# Recupera o valor fator de ajuste
não correntista

if self.dicio['in_crrt'] == 'N':
query_ftr_ajs =
sql_file.format(aux_mtdl_red_cartao,
n_crrt)
aux_ftr_ajst_n_crrt =
factor.getResult(conn,
query_ftr_ajs)[0][3]
aux_ftr_ajst_n_crrt =
float(aux_ftr_ajst_n_crrt.replace(',',
'.'))

# Recupera o valor fator de ajuste
sem prov bb

if self.dicio['in_fun'] == 0 and self.dicio['in_pgt'] == 0 and self.dicio['in_unit'] == 'N':
query_ftr_ajs = sql_file.format(aux_mtdl_red_cartao, sem_prov_bb)
aux_ftr_ajst_sem_prov_bb = factor.getResult(conn, query_ftr_ajs)[0][3]
aux_ftr_ajst_sem_prov_bb = float(aux_ftr_ajst_sem_prov_bb.replace(',', '.'))

# Recupera o valor fator de ajuste
renda disp

if cpvt_renda in (27, 26, 32):
query_ftr_ajs = sql_file.format(aux_mtdl_red_cartao, renda_disp)
aux_ftr_ajs_renda_disp = factor.getResult(conn, query_ftr_ajs)[0][3]
aux_ftr_ajs_renda_disp = float(aux_ftr_ajs_renda_disp.replace(',', '.'))

# Recupera o valor fator de ajuste
renda dcld

if cpvt_renda in (18, 3, 7):
query_ftr_ajs = sql_file.format(aux_mtdl_red_cartao, renda_dcld)
aux_ftr_ajst_renda_dcld = factor.getResult(conn, query_ftr_ajs)[0][3]
aux_ftr_ajst_renda_dcld = float(aux_ftr_ajst_renda_dcld.replace(',', '.'))

# Executa calculo multiplicando
fatores de ajuste retirados da
query

self.dicio['vl_slim_20_apvd'] = self.dicio['vl_slim_20_apvd']
* aux_ftr_ajst_n_crrt * aux_ftr_ajst_sem_prov_bb *\
aux_ftr_ajs_renda_disp * aux_ftr_ajst_renda_dcld

# Calcula os Grupos e Blocos

ca.calcularGrupos(self)
ca.calcularBlocos(self)

# Executa a Procedimentos Finais

p.procFinais(self)

3. Parcelado

ProcParcelado

ProcessaParcelado()

Cálculos

calculoAgrup()

calcularGrupos()

Método para processar os cálculos
dos Agrupamentos
Parametros:
prdt = Nome do Produto

if prdt == "VCLO":
for tipo in ['apvd', 'clcd']:
if self.dicio['vl_slim_21_' + tipo] > self.dicio['vl_slim_117_' + tipo]:
self.dicio['vl_grupo_60_' + tipo] = self.dicio['vl_slim_21_' + tipo]
else:
self.dicio['vl_grupo_60_' + tipo] = self.dicio['vl_slim_117_' + tipo]

#INCLUIR REGRA DO ANCKCCF1-IN-AUX-EMER AQUI. FALTA INCLUIR A VARIAVEL DE RECONSIDERAÇÃO FUTURAMENTE.
if self.dicio['in_bnf_astl'] == 'S' and self.dicio['in_pgt'] == 0:
self.dicio['vl_grupo_60_apvd'] = 0

elif prdt == "RDEX":
for prd in [180, 181]:
self.dicio['vl_slim_' + str(prd) + '_apvd'] = self.dicio['vl_slim_' + str(prd) + '_utzd']
self.dicio['vl_slim_' + str(prd) + '_clcd'] = 0

for tipo in ['apvd', 'clcd']:
self.dicio['vl_grupo_65_' + tipo] = self.dicio['vl_slim_180_' + tipo] + \
self.dicio['vl_slim_181_' + tipo]

#INCLUIR REGRA DO ANCKCCF1-IN-AUX-EMER AQUI. FALTA INCLUIR A VARIAVEL DE RECONSIDERAÇÃO FUTURAMENTE.
if self.dicio['in_bnf_astl'] == 'S' and self.dicio['in_pgt'] == 0:
self.dicio['vl_grupo_65_apvd'] = 0
self.dicio['vl_slim_180_apvd'] = 0
self.dicio['vl_slim_181_apvd'] = 0

elif prdt == "RAO":
self.dicio['vl_pstc_rao_apvd'] = self.dicio['vl_ttl_pcl_rsct']

self.dicio['vl_pstc_rao_clcd'] = 0


self.dicio['vl_slim_111_apvd'] = self.dicio['vl_slim_111_utzd']
self.dicio['vl_slim_111_clcd'] = 0

self.dicio['vl_grupo_46_apvd'] = self.dicio['vl_slim_111_utzd']
self.dicio['vl_grupo_46_clcd'] = 0

#INCLUIR REGRA DO ANCKCCF1-IN-AUX-EMER AQUI. FALTA INCLUIR A VARIAVEL DE RECONSIDERAÇÃO FUTURAMENTE.
if self.dicio['in_bnf_astl'] == 'S' and self.dicio['in_pgt'] == 0:
self.dicio['vl_grupo_46_apvd'] = 0
self.dicio['vl_pstc_rao_apvd'] = 0
self.dicio['vl_slim_111_apvd'] = 0

elif prdt == "FUNCI":
# Denota o valor calculado e aprovado dos produtos 140, 228, 162, 157 e atribui nas variáveis do valor de grupo 64
# calculado e aprovado
# O código zera os maiores sublimites do grupo 64 aprovado e calculado
for tipo in ['apvd', 'clcd']:
self.dicio['maior_slim_funci_' + tipo] = 0

# O código compara os valores calculados e aprovados dos produtos 140, 157, 162, 228.
for prd in [140, 157, 162, 228]:
for tipo in ['apvd', 'clcd']:
if self.dicio['vl_slim_' + str(prd) + '_' + tipo] > self.dicio['maior_slim_funci_' + tipo]:
self.dicio['maior_slim_funci_' + tipo] = self.dicio['vl_slim_' + str(prd) + '_' + tipo]
for tipo in ['apvd', 'clcd']:
self.dicio['vl_grupo_64_' + tipo ] = self.dicio['maior_slim_funci_' + tipo]

# O código compara o valor calculado e aprovado do produto 157
#for tipo in ['apvd', 'clcd']:
# if self.dicio['vl_slim_157_' + tipo] > self.dicio['maior_slim_funci_' + tipo]:
# self.dicio['maior_slim_funci_' + tipo] = self.dicio['vl_slim_157_' + tipo]

# O valor do grupo 64 calculado recebe o valor da varável do maior sublimite do grupo 64 calculado
#for tipo in ['apvd', 'clcd']:
# self.dicio['vl_grupo_64_' + tipo ] = self.dicio['maior_slim_funci_' + tipo]

elif prdt == "ECF":
# Este trecho é responsavel por calcular o valor grupo 55 calculado e aprovado

# Inicializa as variaveis 'maior_slim_ecf_apvd' e 'maior_slim_ecf_clcd'
for tipo in ['apvd', 'clcd']:
self.dicio['maior_slim_ecf_' + tipo] = self.dicio['vl_slim_137_' + tipo]

# Compara o valor calculado e aprovado do produto 155 e 179
for prd in [155, 179]:
for tipo in ['apvd', 'clcd']:
if self.dicio['vl_slim_' + str(prd) + '_' + tipo] > self.dicio['maior_slim_ecf_' + tipo]:
self.dicio['maior_slim_ecf_' + tipo] = self.dicio['vl_slim_'+ str(prd) + '_' + tipo]

# Soma nas variaveis 'maior_slim_ecf_apvd' e 'maior_slim_ecf_clcd', o valor do aprovado e calculado do produto 171
for tipo in ['apvd', 'clcd']:
self.dicio['maior_slim_ecf_' + tipo] += self.dicio['vl_slim_171_' + tipo]
self.dicio['vl_grupo_55_' + tipo] = self.dicio['maior_slim_ecf_' + tipo]

elif prdt == "CDC":
# Este trecho é responsavel por calcular o valor grupo 45 calculado e aprovado
for tipo in ['apvd', 'clcd']:
self.dicio['maior_slim_cdc_' + tipo] = 0

#for prd in [83,115,116,119,129,130,131,142,156,156,157,159,160,161,163,173]:
for prd in [83,115,116,119,129,130,131,142,156,156,159,160,161,163,173]:
for tipo in ['apvd', 'clcd']:
if self.dicio['vl_slim_' + str(prd) + '_' + tipo] > self.dicio['maior_slim_cdc_'+ tipo]:
self.dicio['maior_slim_cdc_' + tipo] = self.dicio['vl_slim_' + str(prd) + '_' + tipo]

for tipo in ['apvd', 'clcd']:
self.dicio['vl_grupo_45_' + tipo] = self.dicio['maior_slim_cdc_' + tipo]

#INCLUIR REGRA DO ANCKCCF1-IN-AUX-EMER AQUI. FALTA INCLUIR A VARIAVEL DE RECONSIDERAÇÃO FUTURAMENTE.
if self.dicio['in_bnf_astl'] == 'S' and self.dicio['in_pgt'] == 0:
self.dicio['vl_grupo_45_apvd'] = 0

calcularBloco()

Método para processar o cálculo
do Blocos de Produtos calculado e
aprovado

# Inicialização das variaveis auxiliar
for tipo in ['apvd', 'clcd']:
self.dicio['maior_grupo_' + tipo] = 0

# Realiza a soma dos valores dos grupos 55 e 64 e armazena na variavel vl_grupo_5564_clcd e
# vl_grupo_5564_apvd
for tipo in ['apvd', 'clcd']:
self.dicio['vl_grupo_5564_' + tipo] = self.dicio['vl_grupo_55_' + tipo] + \
self.dicio['vl_grupo_64_' + tipo]

# Compara se o valor de grupo calculado ou aprovado é maior que o maior valor de grupo calculado ou aprovado
for prd in [45, 5564, 60]:
for tipo in ['apvd', 'clcd']:
if self.dicio['vl_grupo_' + str(prd) + '_' + tipo] > self.dicio['maior_grupo_' + tipo]:
self.dicio['maior_grupo_' + tipo] = self.dicio['vl_grupo_' + str(prd) + '_' + tipo]

# Somariza os valores dos Grupos e armazena na variavel vl_bloco_14_clcd e vl_bloco_14_apvd
for tipo in ['apvd', 'clcd']:
self.dicio['vl_bloco_14_' + tipo] = self.dicio['maior_grupo_' + tipo] + \
self.dicio['vl_grupo_46_' + tipo] + \
self.dicio['vl_grupo_65_' + tipo]

calculoFAR()

Método para calcular o valor da variável auxiliar do valor de prestação
FAR calculado e aprovado

class CalculoFar:
def __init__(self, dicio):
self.dicio = dicio

def calcularFar(self, prd):
'''
Metodo para calcular o valor da variável auxiliar do valor de prestação FAR calculado e aprovado
'''
if prd == '045':
self.dicio['ws_vl_pstc_far_clcd_045'] = int(self.dicio['vl_pstc_cdc_clcd']) * self.dicio['vl_ftr_ajst_pstc_pcld']
self.dicio['ws_vl_pstc_far_apvd_045'] = int(self.dicio['vl_pstc_cdc_apvd']) * self.dicio['vl_ftr_ajst_pstc_pcld']

elif prd == '021':
self.dicio['ws_vl_pstc_far_clcd_021'] = int(self.dicio['vl_pstc_vclo_clcd']) * self.dicio['vl_ftr_ajst_pstc_vclo']
self.dicio['ws_vl_pstc_far_apvd_021'] = int(self.dicio['vl_pstc_vclo_apvd']) * self.dicio['vl_ftr_ajst_pstc_vclo']

calculoPrtfCdc()

Método para processar o cálculo do portfolio CDC

from parcelado.regras.trataSLim import TrataSLim
from parcelado.calculos.calculoAgrup import CalculoAgrup

class CalculoPrtfCdc:

def __init__(self, dicio):
self.dicio = dicio

def calcularPrtfCdc(self):
# Instancia de Classes
ts = TrataSLim(self.dicio)
ca = CalculoAgrup(self.dicio)

# Calculo do valor da Prestacação CDC aprovado
self.dicio['vl_pstc_cdc_apvd'] = int(self.dicio['vl_pstc_cdc_clcd']) * \
(self.dicio['waux_pc_cdc'] / 100) * \
self.dicio['vl_ftr_ajst_pstc_pcld']

# Chamada para a aplicação de regras do Sublimite Aprovado CDC
ts.slimApvdCdc()

if self.dicio['cd_tip_cpvt_ren'] == 'C':
for prd in [21, 111, 117, 179, 180, 181]:
for tipo in ['apvd', 'clcd']:
self.dicio['vl_slim_' + str(prd) + '_' + tipo] = 0

# Chamada para o calculo dos Grupos
for grupo in ['CDC', 'ECF', 'RAO', 'FUNCI', 'VCLO', 'RDEX']:
ca.calcularGrupos(grupo)


# Chamada para o calculo do Bloco
ca.calcularBloco()

calculoPstc()

Método para processar os cálculos das prestações
Parametros:
ativo = Nome do Processo

class CalculoPstcCdc:
def __init__(self, dicio):
self.dicio = dicio

def calcularPstc(self, ativo):
'''
Metodo para processar os calculos das prestações

Parametros:
ativo = Nome do Processo
'''
if ativo == 'Corren':
self.dicio['vl_pstc_cdc_clcd'] = int(self.dicio['vl_ftr_demp'] * \
self.dicio['cd_ftr_rlc'] * \
self.dicio['vl_cfct_045'] * \
self.dicio['vl_smat_ren_pres_trans'])

elif ativo == 'Inss':
self.dicio['vl_pstc_cdc_clcd'] = int(self.dicio['vl_cfct_045'] * \
self.dicio['vl_smat_ren_pres_trans'])

elif ativo == 'Parc':
self.dicio['vl_pstc_cdc_clcd'] = int(self.dicio['vl_ftr_demp'] * \
self.dicio['vl_cfct_045'] * \
self.dicio['vl_ren_brto'] * \
self.dicio['waux_coef_ren'])

elif ativo == 'Proven':
self.dicio['vl_pstc_cdc_prtt'] = int(self.dicio['vl_ftr_demp'] * \
self.dicio['cd_ftr_rlc'] * \
self.dicio['vl_cfct_x_prtt'] * \
self.dicio['vl_smat_ren_clcd'])

elif ativo == 'Vclo':
self.dicio['vl_pstc_vclo_clcd'] = int(self.dicio['vl_ftr_demp'] * \
self.dicio['cd_ftr_rlc'] * \
self.dicio['vl_cfct_060'] * \
self.dicio['vl_rend_lqdo_ttl'])

calculoSlim()

Metodo para calcular o valor do Sub Limite.
Parametros:
Regra: server para realizar o calculo do sub-limite para ECF, se não informado, será
calculado apenas para os demais produtos.
1: ECF
2: Veiculo
None: Demais produtos

# CalculoSlim

class CalculoSlim:
def __init__(self, dicio):
self.dicio = dicio
def calcularSLim(self, regra = None):
if regra == 1:

# Cálculo sublimite ECF

self.dicio['aux_vl_slim'] = self.dicio['aux_pstc_slim'] * self.dicio['aux_mtp_slim']
if self.dicio['aux_vl_slim'] > self.dicio['aux_vl_lim_ref'] and self.dicio['cd_fuc'] == 1:

self.dicio['aux_vl_slim'] = self.dicio['aux_vl_lim_ref']
elif regra == 2:

# Cálculo sublimite de Veículos

for prd in [21, 117]:
for tipo in ['apvd', 'clcd']:
self.dicio['vl_slim_'+ str(prd) + '_' + tipo] = int(self.dicio['vl_pstc_vclo_' + tipo]) * \
self.dicio['vl_mtp_clc_slim_' + str(prd)]
else:

# Cálculos sublimite - demais
produtos

self.dicio['aux_red_slim'] = 1

# O código compara se a variável auxiliar de cordialidade de sublimite é igual a 161, \
para calcular o valor da variável auxiliar de valor de sublimite

if self.dicio['aux_cd_slim'] == 161:
self.dicio['aux_vl_slim'] = self.dicio['aux_pstc_slim'] * self.dicio['aux_mtp_slim'] * \
self.dicio['aux_red_slim'] * self.dicio['aux_far_slim']

else:
self.dicio['aux_vl_slim'] = self.dicio['aux_pstc_slim'] * self.dicio['aux_mtp_slim'] * \
self.dicio['aux_red_slim'] * self.dicio['aux_far_slim'] * \
self.dicio['aux_redt_vcli']

# Se a variável auxiliar do valor de sublimite for maior que a variável auxiliar de
sublimite do valor limite referencia e se o caso for de pessoa física, a variável
auxiliar do valor de sublimite recebe o valor da variável do valor de limite
referencia

if self.dicio['aux_vl_slim'] > self.dicio['aux_vl_lim_ref'] and self.dicio['cd_fuc'] == 1:
self.dicio['aux_vl_slim'] = self.dicio['aux_vl_lim_ref']


if self.dicio['aux_mtp_slim'] > self.dicio['gda_maior_mtp'] and self.dicio['aux_vl_slim'] > 0:
self.dicio['wix_crit'] = 0

for i in range (0, self.dicio['qt_reg_slim_rnv']):
if self.dicio['cd_slim_rnv'][i] == self.dicio['aux_cd_slim']:
self.dicio['gda_maior_mtp'] = self.dicio['aux_mtp_slim']
break

calculoVlTeto()

Método para processar o cálculo do Valor Teto

class CalculoVlTeto():

def __init__(self, dicio):
self.dicio = dicio

if self.dicio['cd_mtdl_anl_crd'] == 51:
self.pc1, self.pc2, self.pc3 = 0.10, 0.15, 0.20

elif self.dicio['cd_mtdl_anl_crd'] in (52,53):
self.pc1, self.pc2, self.pc3 = 0.07, 0.10, 0.15

def calcularVlTeto(self):

if self.dicio['wgda_vlr_rndm_lqdo_total'] <= self.dicio['wgda_vl_pc40_rnd_parm_teto']:
self.dicio['wgda_teto_pstc_cdc'] = self.dicio['wgda_vlr_rndm_lqdo_total'] * self.pc1

elif self.dicio['wgda_vlr_rndm_lqdo_total'] <= self.dicio['wgda_vl_pc80_rnd_parm_teto']:
self.dicio['wgda_teto_pstc_cdc'] = self.dicio['wgda_vlr_rndm_lqdo_total'] * self.pc2

elif self.dicio['wgda_vlr_rndm_lqdo_total'] > self.dicio['wgda_vl_pc80_rnd_parm_teto']:
self.dicio['wgda_teto_pstc_cdc'] = self.dicio['wgda_vlr_rndm_lqdo_total'] * self.pc3

else:
self.dicio['wgda_teto_pstc_cdc'] = 0

Módulos

ancsc246

cargaTabRet()

class CargaTabRet:
def __init__(self, dicio):
self.dicio = dicio
self.dicio['crit_cd_seq'] = []
self.dicio['in_rgr_atv'] = []
self.dicio['cd_crit'] = []
self.dicio['nr_seql_crit'] = []
self.dicio['in_crit_atv'] = []
self.dicio['cd_tip_ctu'] = []
self.dicio['tx_ctu'] = []
self.dicio['vl_flo_crit'] = []
self.dicio['vl_alf_crit'] = []

def carregarTabRet(self, tipo, res_psq, pos):

if tipo != 3:
self.dicio['in_rgr_atv'].append(res_psq[0])

if tipo == 1:
if pos == 72:
self.dicio['gda_seql_crit_rech'] = res_psq[2]
self.dicio['gda_nr_crit_rech'] = res_psq[1]
self.dicio['ind_fim'] = 'S' # Sair do laço?
else:
self.dicio['gda_seql_crit_rech'] = 0
self.dicio['gda_nr_crit_rech'] = 0
elif tipo == 3:
self.dicio['ic_tab_opr'] = pos
if self.dicio['faixa_tab_opr']:
if pos == 72:
self.dicio['ind_fim'] = 'S'
# Calculo
self.dicio['crit_cd_seq'].append((res_psq[1] * 1000) + res_psq[2])

self.dicio['cd_crit'].append(res_psq[1])
self.dicio['nr_seql_crit'].append(res_psq[2])
self.dicio['in_crit_atv'].append(res_psq[5])
self.dicio['cd_tip_ctu'].append(res_psq[3])
self.dicio['tx_ctu'].append(res_psq[4])


if self.dicio['cd_tip_ctu'][pos] == 3:
self.dicio['vl_flo_crit'].append(str(res_psq[4]).replace(" ", ""))
else:
self.dicio['vl_alf_crit'].append(str(res_psq[4]).replace(" ", ""))

psqInformacao()

from config_erro.trataErro import TratarErro
from db.dbFactor import DBFactor

class PesquisaInformacao:
def __init__(self, dicio):
self.dicio = dicio
self.caminho = dicio['caminho']

def lerQuery(self, id):
'''
Metodo para a leitura das Querys em SQL
'''
# Abre o arquivo com a query
arq = open(self.caminho + "/configuracao/query_psqC{0}.sql".format(id), "r")
sql_query = arq.read()
arq.close()
return sql_query

def montaQuery(self, id):
'''
Metodo para formatar as Querys em SQL
'''
query = self.lerQuery(id)
if id in [1, 9]:
return query.format(self.dicio['cd_mtdl_e'], \
self.dicio['cd_rgr_e'], \
self.dicio['gda_nr_crit_rech'], \
self.dicio['gda_seql_crit_rech'])
elif id == 2:
return query.format(self.dicio['aux_cd_mtdl'], self.dicio['aux_cd_rgr'], self.dicio['cd_crit_e'])

elif id in [3, 10]:
return query.format(self.dicio['aux_cd_mtdl'], self.dicio['aux_cd_rgr'], self.dicio['cd_crit_e'])

elif id == 4:
return query.format(self.dicio['aux_cd_mtdl'], self.dicio['aux_cd_rgr'])

elif id in [5, 6, 7, 8]:
return query.format(self.dicio['aux_cd_mtdl'])

elif id == 11:
return query.format(self.dicio['aux_cd_mtdl'], \
self.dicio['aux_cd_rgr'], \
self.dicio['cd_crit_e'], \
self.dicio['gda_nr_seql_crit_loc'], \
self.dicio['gda_nr_seql_cmps'])

def pesquisarCriterio(self, id):
factor = DBFactor(self.caminho)

#
self.dicio['gda_cd_crit'] = []
self.dicio['gda_nr_seql_cmps'] = []
self.dicio['gda_in_rgr_atv'] = []
self.dicio['gda_nr_seql_crit'] = []
self.dicio['gda_cd_tip_ctu'] = []
self.dicio['gda_tx_ctu'] = []
self.dicio['gda_in_crit_atv'] = []

# Criando a conexão com o banco de dados
conn = factor.getConnect()

# Consultando o banco de dados
query_psq = self.montaQuery(id)
res_psq = factor.getResult(conn, query_psq)
return res_psq


def pesquisarMetodologia(self, psq):
# Cria a conexão com o Db2
factor = DBFactor(self.caminho)
conn = factor.getConnect()

self.dicio['cd_mtdl_anl_aux'] = []
self.dicio['qt_reg'] = 0

if psq == "mtld":
query_psq = self.montaQuery(5)

elif psq == "vgt":
query_psq = self.montaQuery(6)

elif psq == "pnd":
query_psq = self.montaQuery(7)

elif psq == "hst":
query_psq = self.montaQuery(8)

elif psq == "rgr":
query_psq = self.montaQuery(4)

res_psq = factor.getResult(conn, query_psq)

if psq in ("mtld", "vgt", "pnd", "hst"):

for i in range(0, len(res_psq)):
self.dicio['cd_mtdl_anl_aux'].append(res_psq[i][0])
self.dicio['qt_reg'] += 1

if psq == "rgr":
if len(res_psq) > 0:
self.dicio['qt_reg'] = res_psq[0][0]

def pesquisarCriterio2(self, psq):
'''
Metodo traduzido da subrotina ANCSC246: 104000-PSQ-CRITERIO-02
'''
# Carregando a query de consulta no DB2
query_psq = self.montaQuery(11)


# Consultando o DB2
res = factor.getResult(conn, query_psq)

if len(res) > 0:
for i in range(0, len(res)):
self.dicio['qt_reg'] += 1
self.dicio['cd_crit'][i] = self.dicio['aux_cd_crit']
self.dicio['nr_seql_crit'][i] = self.dicio['gda_nr_seql_crit_loc']
self.dicio['cd_tip_ctu'][i] = res[i][0] # self.dicio['gda_cd_tip_ctu']
self.dicio['tx_ctu'][i] = res[i][1] # self.dicio['gda_tx_ctu']
self.dicio['in_crit_atv'][i] = res[i][2] # self.dicio['gda_in_crit_atv']

if res[i][0] == 3:
self.dicio['vl_flo_crit'][1] = res[i][1]
else:
self.dicio['vl_alf_crit'][1] = res[i][1]


def pesquisarCriterioPend(self):
'''
Metodo traduzido da rotina ANCSC246: 105000-PSQ-CRITERIOS-PEND
'''


# Chama cursor
query_psq = self.montaQuery(3)
res = factor.getResult(conn, query_psq)

if len(res) != 0: #self.dicio['aux_sqlcode_normal']:
self.dicio['ind_fim'] = 'N' # retirar?
ix = 0 # retirar?

for ix in range(0, len(res)):
self.dicio['gda_in_rgr_atv'].append(res[ix][0])
self.dicio['gda_cd_crit'].append(res[ix][1])
self.dicio['gda_nr_seql_crit'].append(res[ix][2])
self.dicio['gda_cd_tip_ctu'].append(res[ix][3])
self.dicio['gda_tx_ctu'].append(res[ix][4])
self.dicio['gda_in_crit_atv'].append(res[ix][5])

if self.dicio['in_ret_bxd'] == 'N' and self.dicio['gda_in_rgr_atv'] == 'N':
break # self.dicio['ind_fim'] = 'S' # retirar?

if self.dicio['in_ret_bxd'] == 'S' or self.dicio['gda_in_rgr_atv'] == 'S' and self.dicio['gda_crit_atv'] == 'S':
# Por parâmetro, passar o "ix" para a função 105001.
#PERFORM 105001-CARGA-TAB-RET
ctr.carregarTabRet('C3', ) # Precisamos descobrir qual o valor do segundo parametro que será encaminhado aqui dentro

#if len(res) == 0: # retirar?
# return # self.dicio['ind_fim'] = 'S' # retirar?


def pesquisarSeqlCrit(self):
query_psq = self.montaQuery(10)
res = factor.getResult(conn, query_psq)

if len(res) != 0:
self.dicio['qtd_reg'] = 1
self.dicio['nr_seql_crit'][0].append(cursor[i][0])
else:
self.dicio['nr_seql_crit'][0].append(0)

rotinaPrincipal()

from parcelado.modulos.ancsc246.psqInformacao import PesquisaInformacao

class RotinaPrincipal():
def __init__(self, dicio):
self.dicio = dicio

def rotina_Principal(self):
#Instanciando classes
pi = PesquisaInformacao(self.dicio)

#self.dicio['sql_init_flag'] = 0

#self.dicio['aux_cd_mtdl'] = self.dicio['cd_mtdl_e']

#self.dicio['aux_cd_rgr'] = self.dicio['cd_rgr_e']


if self.dicio['cd_fuc'] == 1:
if self.dicio['cd_crit_e'] > 0:

# TODO perform 101000_psq_crit_especifico thru 101999_fim
# Aguardando a definição do arquivo psqCriterio.py para incluir essa chamada
pi.pesquisarCriterioEspo()
else:

if self.dicio['in_ret_bxd'] == 'S':
return pi.pesquisarCriterio(1)
else:
return pi.pesquisarCriterio(9)

elif self.dicio['cd_fuc'] in (2, 4):
#TODO perform 103000_psq_criterio_01 thru 103000_fim
# Aguardando a definição do arquivo psqCriterio.py para incluir essa chamada
pi.pesquisarCriterio1()

elif self.dicio['cd_fuc'] == 3:
pi.pesquisarCriterioPend()


elif self.dicio['cd_fuc'] == 5:
pi.pesquisarMetodologia('mtdl')

elif self.dicio['cd_fuc'] == 6:
pi.pesquisarMetodologia('vgt')

elif self.dicio['cd_fuc'] == 7:

pi.pesquisarMetodologia('pnd')

elif self.dicio['cd_fuc'] == 8:
pi.pesquisarMetodologia('hst')

elif self.dicio['cd_fuc'] == 9:
pi.pesquisarSeqlCrit()

elif self.dicio['cd_fuc'] == 10:
pi.pesquisarMetodologia('rgr')

ancsf159

ancsf159()

from parcelado.modulos.ancsf159.buscaMci import BuscaMci
from parcelado.modulos.ancsf159.inicializarVrvTrb import InicializaVrvTrb
from parcelado.modulos.ancsf159.pesquisarEmpregador import PesquisarEmpregador
from parcelado.modulos.ancsf159.calculoPrestacao import CalculoPrestacao

class ANCSF159():
def __init__(self, dicio):
self.dicio = dicio

def processar(self):
# Instancias de classe
ivt = InicializaVrvTrb(self.dicio)
bm = BuscaMci(self.dicio)
pe = PesquisarEmpregador(self.dicio)
cp = CalculoPrestacao(self.dicio)

ivt.inicializa_Vrv_Trab()

bm.buscarMCI()

pe.pesquisarEpgrDfrt30Pc()

cp.calcularPstcPF()

buscaMci()

Classe responsável por carregar os MCIs do
INSS, BB, PREVIDÊNCIA e Exército

import os

class BuscaMci():
def __init__(self, dicio):
self.dicio = dicio

def buscarMCI(self):

'''
Classe responsavel por carregar os MCIs do INSS, BB, PREVIDENCIA e Exercito
'''
self.dicio['cd_id_inss'] = 1
self.dicio['cd_id_bb'] = 2
self.dicio['cd_id_previ'] = 3
self.dicio['cd_id_exercito'] = 4

if os.environ['AMBIENTE'] in ['MODELAGEM', 'DESENVOLVIMENTO']:
# 1 - INSS
self.dicio['cd_mci_inss'] = 103824079
self.dicio['cd_cvn_inss'] = 0

# 2 - BB
self.dicio['cd_mci_bb'] = 903485186
self.dicio['cd_cvn_bb'] = 0

# 3 - PREVI
self.dicio['cd_mci_previ'] = 602907665
self.dicio['cd_cvn_previ'] = 0

# 4 - EXERCITO
self.dicio['cd_mci_exercito'] = 690001155
self.dicio['cd_cvn_exercito'] = 134486

elif os.environ['AMBIENTE'] == 'HOMOLOGAÇÃO':
# 1 - INSS
self.dicio['cd_mci_inss'] = 208961759
self.dicio['cd_cvn_inss'] = 0

# 2 - BB
self.dicio['cd_mci_bb'] = 130965148
self.dicio['cd_cvn_bb'] = 0

# 3 - PREVI
self.dicio['cd_mci_previ'] = 178998134
self.dicio['cd_cvn_previ'] = 0

# 4 - EXERCITO
self.dicio['cd_mci_exercito'] = 248940924
self.dicio['cd_cvn_exercito'] = 296598

else:
# 1 - INSS
self.dicio['cd_mci_inss'] = 103824079
self.dicio['cd_cvn_inss'] = 0

# 2 - BB
self.dicio['cd_mci_bb'] = 903485186
self.dicio['cd_cvn_bb'] = 0

# 3 - PREVI
self.dicio['cd_mci_previ'] = 100186582
self.dicio['cd_cvn_previ'] = 0

# 4 - EXERCITO
self.dicio['cd_mci_exercito'] = 105907575
self.dicio['cd_cvn_exercito'] = 296598

calculoPrestacao()

from parcelado.modulos.ancsf159.pesquisarDados import PesquisarDados
from parcelado.modulos.ancsf159.selecionarRndCvn import SelecionarRndCvn
from parcelado.modulos.ancsf159.verificarZeraPrestacao import VerificarZeraPrestacao
from parcelado.modulos.ancsf159.calculoRenda import CalculoRenda

from dateutil.relativedelta import relativedelta
from datetime import datetime

class CalculoPrestacao:
def __init__(self, dicio):
self.dicio = dicio

def calcularPstcFinal(self):

self.dicio['vl_pstc_funci_clcd'] = int(self.dicio['gda_vl_rnd_funci_seld'] * 0.30 * \
self.dicio['vl_cfct_055'])

if self.dicio['vl_pstc_funci_clcd'] > self.dicio['vl_lim_ref_055']:
self.dicio['vl_pstc_funci_clcd'] = self.dicio['vl_lim_ref_055']

self.dicio['vl_pstc_funci_apvd'] = int(self.dicio['vl_pstc_funci_clcd'] * self.dicio['vl_ftr_ajst_pstc_cgn_flh'])

self.dicio['vl_pstc_bb_org'] = self.dicio['vl_pstc_funci_clcd']
self.dicio['vl_pstc_demais'] = int(self.dicio['gda_vl_pstc_ecf_seld'] * self.dicio['vl_cfct_055'])

if self.dicio['vl_pstc_demais'] > self.dicio['vl_lim_ref_055']:
self.dicio['vl_pstc_demais'] = self.dicio['vl_lim_ref_055']

self.dicio['vl_pstc_demais_org'] = self.dicio['vl_pstc_demais']
self.dicio['vl_pstc_ttl_ecf_clcd'] = self.dicio['vl_pstc_demais']

if self.dicio['vl_pstc_ttl_ecf_clcd'] > self.dicio['vl_lim_ref_055']:
self.dicio['vl_pstc_ttl_ecf_clcd'] = self.dicio['vl_lim_ref_055']

self.dicio['vl_pstc_ttl_ecf_apvd'] = int(self.dicio['vl_pstc_ttl_ecf_clcd'] * self.dicio['vl_ftr_ajst_pstc_cgn_flh'])

self.dicio['vl_pstc_ttl_ecf_org'] = self.dicio['vl_pstc_ttl_ecf_apvd']

if self.dicio['waux_pstc_slim_171'] > self.dicio['vl_lim_ref_055']:
self.dicio['waux_pstc_slim_171'] = self.dicio['vl_lim_ref_055']

self.dicio['vl_pstc_crt_clcd'] = int(self.dicio['waux_pstc_slim_171'])
self.dicio['vl_pstc_crt_apvd'] = int(self.dicio['waux_pstc_slim_171'] * self.dicio['vl_ftr_ajst_pstc_cgn_flh'])

if self.dicio['in_cli_anot_348'] == 'S' and self.dicio['in_cli_adpc_clireab'] != 1:
self.dicio['vl_pstc_funci_clcd'] = 0
self.dicio['vl_pstc_bb_org'] = 0

self.dicio['ic_ajst_cvn_ecf'] = self.dicio['waux_ic_ajst_cvn_ecf_seld']
self.dicio['ic_ajst_cvn_crt'] = self.dicio['waux_ic_ajst_cvn_crt_seld']
self.dicio['ic_ajst_cvn_sal'] = self.dicio['waux_ic_ajst_cvn_sal_seld']
self.dicio['ic_mtp_cvn_ecf'] = self.dicio['waux_ic_mtp_seld_ecf']
self.dicio['ic_mtp_cvn_crt'] = self.dicio['waux_ic_mtp_seld_crt']
self.dicio['ic_mtp_cvn_sal'] = self.dicio['waux_ic_mtp_seld_sal']
self.dicio['vl_max_cvn_ecf'] = self.dicio['waux_vl_max_cvn_ecf_seld']
self.dicio['vl_max_cvn_crt'] = self.dicio['waux_vl_max_cvn_crt_seld']
self.dicio['vl_max_cvn_sal'] = self.dicio['waux_vl_max_cvn_sal_seld']

def calcularPstcSgm13(self):
'''
Transcrição do Modulo 110000-CALCULO-PSTC-SGM-13
'''
# Instancia de classe
pd = PesquisarDados()

pd.pesquisarDadosConvenio(self.dicio[''], 137)

self.dicio['vl_pstc_ttl_ecf_clcd'] = int(self.dicio['vl_bnf'] * 0.30 * \
self.dicio['cfct_033'] * \
self.dicio['waux_ic_red_pstc'])

if self.dicio['vl_pstc_ttl_ecf_clcd'] > self.dicio['lim_ref_055']:
self.dicio['vl_pstc_ttl_ecf_clcd'] = self.dicio['lim_ref_055']

self.dicio['vl_pstc_ttl_ecf_org'] = self.dicio['vl_pstc_ttl_ecf_clcd']

self.dicio['vl_pstc_ttl_ecf_apvd'] = self.dicio['vl_pstc_ttl_ecf_clcd']

self.dicio['ic_ajst_cvn_ecf'] = self.dicio['ic_ajst_cvn']

self.dicio['ic_mtp_cvn_ecf'] = self.dicio['waux_ic_mtp_cvn']
self.dicio['vl_max_cvn_ecf'] = self.dicio['waux_vl_max_cvn']

pd.pesquisarDadosConvenio(self.dicio['cd_mci_inss'], 171)

self.dicio['ic_ajst_cvn_crt'] = self.dicio['waux_ic_ajst_cvn']
self.dicio['ic_mtp_cvn_crt'] = self.dicio['waux_ic_mtp_cvn']
self.dicio['vl_max_cvn_crt'] = self.dicio['waux_vl_max_cvn']

def calcularPstcPF(self):
# Declarando Variáveis Auxiliares
#self.dicio['waux_dta_atual_alpha'] = datetime.now().strftime("%Y-%m-%d")
#self.dicio['waux_dta_atual'] = datetime.today().strftime("%Y-%m-%d")
self.dicio['waux_dta_a2anos'] = (datetime.today() + relativedelta(years=-2)).strftime("%Y-%m-%d")

# Instancia de classes
src = SelecionarRndCvn(self.dicio)
zp = VerificarZeraPrestacao(self.dicio)
cr = CalculoRenda(self.dicio)

# Chamadas para as funções
cr.calcularRndLiqPres()

src.selecionarRndCvn()

self.calcularPstcFinal()

zp.verifZeraPrestacao()

calculoRenda()

cargaRendaValida()

inicializarVrvTrb()

pesquisarDados()

pesquisarEmpregador()

selecionarRenda()

selecionarRndCvn()

verificarZeraPrestacao()

Regras

apuraTeto()

recompRendaLqda()

redMtpSlim083()

regraCMP()

regraPstcEcfFunci()

regrasPstc()

# RegrasPstc

from parcelado.calculos.calculoPstc import CalculoPstcCdc
from parcelado.regras.trataSnlAlerta import TrataSnlAlerta
from parcelado.regras.recompRendaLqda import RecompRendaLqda
from parcelado.regras.zeraPrestacoes import ZeraPrestacoes

class RegrasPstc:
def __init__(self, dicio):
self.dicio = dicio

# aplicaRegraPstcCorren

# Instancias de Classes
cp = CalculoPstcCdc(self.dicio)
aa = TrataSnlAlerta(self.dicio)
rl = RecompRendaLqda(self.dicio)
zp = ZeraPrestacoes(self.dicio)

self.dicio['waux_vl_2slr_min'] = self.dicio['vl_slr_min'] * 2

cp.calcularPstc('Corren')

if self.dicio['vl_pstc_cdc_clcd'] > 9999999.99:
self.dicio['vl_pstc_cdc_clcd'] = 9999999.99

if self.dicio['vl_pstc_cdc_clcd'] > self.dicio['vl_lim_ref_045']:
self.dicio['vl_pstc_cdc_clcd'] = self.dicio['vl_lim_ref_045']

self.dicio['vl_pstc_cdc_clcd'] += self.dicio['vl_pstc_cdc_prtt']

if self.dicio['cd_sgm_anl'] != 25 and self.dicio['in_bco_pstl'] != 'N':
self.dicio['wgda_vl_ren_brto'] = self.dicio['vl_ren_brto']

if self.dicio['in_pgt'] or self.dicio['in_inss']:
if self.dicio['vl_ren_brto'] == 0:
self.dicio['wgda_vl_ren_brto'] = self.dicio['vl_rend_lqdo_ttl'] * 1.25
if (self.dicio['wgda_vl_ren_brto'] <= self.dicio['vl_ren_prtz_teto']) and \
(self.dicio['vl_rend_lqdo_ttl'] <= self.dicio['vl_ren_prtz_teto']):
# Chamada para Recompe Renda Liquida
rl.recomp_Renda_Lqda()

aa.trata_Snl_Alerta()
if self.dicio['vl_pstc_cdc_apvd'] > self.dicio['wgda_teto_pstc_cdc'] and \
self.dicio['wgda_teto_pstc_cdc'] > 0:
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['wgda_teto_pstc_cdc']

if self.dicio['vl_pstc_cdc_apvd'] > self.dicio['vl_lim_ref_045']:
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['vl_lim_ref_045']

# Chamada para Zera Prestacoes
zp.zera_Prestacoes()

# aplicaRegraPstcInss

# aplicaRegraPstcParc

# aplicaRegraPstcProven

# aplicarRegraPstcVclo

trataSLim()

__init__()

processaCalculo()

def processaCalculo(self, prd, tp = None):
# Instanciando Classe
cs = CalculoSlim(self.dicio)

# Se o parameto tp for informado, montará uma lista com um argumento apenas
lst_tipo = []
if tp is None:
lst_tipo = ['apvd', 'clcd']
else:
lst_tipo.append(tp)

for tipo in lst_tipo:
if prd in [137, 155, 179]:
if tipo == 'apvd':
self.dicio['aux_pstc_slim'] = int(self.dicio['vl_pstc_ecf_demais']) * \
self.dicio['vl_ftr_ajst_pstc_cgn_flh']
else:
self.dicio['aux_pstc_slim'] = int(self.dicio['vl_pstc_ecf_demais'])
elif prd == 171:
self.dicio['aux_pstc_slim'] = int(self.dicio['vl_pstc_crt_' + tipo])
elif prd in [140, 157, 162, 228]:
self.dicio['aux_pstc_slim'] = int(self.dicio['vl_pstc_fun_bb_' + tipo])
elif prd in [116, 119, 131, 142, 156, 159, 160, 161, 163, 173]:
self.dicio['aux_pstc_slim'] = int(self.dicio['vl_pstc_cdc_' + tipo])
elif prd in [83, 115]:
self.dicio['aux_pstc_slim'] = int(self.dicio['ws_psct_cdc_' + str(prd) + '_c'])

self.dicio['aux_mtp_slim'] = self.dicio['vl_mtp_clc_slim_' + str(prd)]
self.dicio['aux_cd_slim'] = prd
self.dicio['aux_far_slim'] = 1
self.dicio['aux_vl_lim_ref'] = self.dicio['vl_lim_ref_' + str(prd)]
if prd == 160 and tipo == 'apvd':
self.dicio['aux_redt_vcli'] = self.dicio['redt_slim_' + str(prd)]
elif prd in [83, 115, 116, 142] and tipo == 'apvd':
self.dicio['aux_redt_vcli'] = self.dicio['redt_slim_' + str(prd) + '_vs_cli']
else:
self.dicio['aux_redt_vcli'] = 1

if prd in self.ecf:
cs.calcularSLim(1)
else:
cs.calcularSLim()

if (prd in [137, 140, 155, 179, 228]) and (tipo == 'apvd'):
self.dicio['vl_slim_' + str(prd) + '_' + tipo] = self.dicio['aux_vl_slim'] * \
self.dicio['vl_ftr_ajst_slim_' + str(prd)]
else:
self.dicio['vl_slim_' + str(prd) + '_' + tipo] = self.dicio['aux_vl_slim']

slim_Vclo()

def slim_Vclo(self):
# Para cliente banco postal, slim veículo igual a zero
# Regra enviada no dia 22/10/2014. Liberar os valores Veiculos
# nao considerando a regra de bco postal (565)
# OBS No book a variavel self.dicio['in_rcdr'] está setada com 12
# Aqui ele faz uma comparação para saber se a execução é em Batch

# Instancia de Classe
cs = CalculoSlim(self.dicio)

# OBS A variavel self.dicio['sem_bnf'] está setada como 4
if self.dicio['in_bco_pstl'] == 'S' and (self.dicio['cd_sgm_anl'] == 19 or \
(self.dicio['cd_mtdl_anl_crd'] == 52 and self.dicio['cd_tip_bnf'] == 4)):
for prd in [21, 117]:
for tipo in ['apvd', 'clcd']:
self.dicio['vl_slim_' + str(prd) + '_' + tipo ] = 0
self.dicio['vl_pstc_vclo_'+ tipo] = 0

elif self.dicio['qt_idd'] > 85:
for prd in [21, 117]:
for tipo in ['apvd', 'clcd']:
self.dicio['vl_slim_' + str(prd) + '_' + tipo ] = 0
self.dicio['vl_pstc_vclo_'+ tipo] = 0

# Calculo valor sublimite calculado e aprovado para os produtos 21 e 117 - Veiculo
cs.calcularSLim(2)
for prd in [21, 117]:
# Validação do valor sublimite calculado e aprovado para os produtod 21 e 117 - Veiculo
# Calculado
if self.dicio['vl_slim_' + str(prd) + '_clcd'] > self.dicio['vl_lim_ref_' + str(prd)]:
self.dicio['vl_slim_' + str(prd) + '_clcd'] = self.dicio['vl_lim_ref_' + str(prd)]

# Aprovado
if self.dicio['vl_slim_' + str(prd)+ '_utzd'] > self.dicio['vl_slim_' + str(prd) + '_apvd']:
self.dicio['vl_slim_' + str(prd) + '_apvd'] = self.dicio['vl_slim_' + str(prd) + '_utzd']

if self.dicio['vl_slim_' + str(prd) +'_utzd'] > self.dicio['vl_lim_ref_' + str(prd)]:
if self.dicio['vl_slim_' + str(prd) + '_apvd'] > self.dicio['vl_slim_' + str(prd) + '_utzd']:
self.dicio['vl_slim_' + str(prd) +'_apvd'] = self.dicio['vl_slim_' + str(prd) + '_utzd']
else:
if self.dicio['vl_slim_' + str(prd) + '_apvd'] > self.dicio['vl_lim_ref_' + str(prd)]:
self.dicio['vl_slim_' + str(prd) + '_apvd'] = self.dicio['vl_lim_ref_' + str(prd)]

if self.dicio['cd_rsco_05'] == 'E' and self.dicio['cd_rsco_05_prvr'] == 'D':
for prd in [21, 117]:
for tipo in ['apvd', 'clcd']:
self.dicio['vl_slim_' + str(prd) + '_' + tipo ] = 0

#INCLUIR REGRA DO ANCKCCF1-IN-AUX-EMER AQUI. FALTA INCLUIR A VARIAVEL DE RECONSIDERAÇÃO FUTURAMENTE.
if self.dicio['in_bnf_astl'] == 'S' and self.dicio['in_pgt'] == 0:
self.dicio['vl_pstc_vclo_apvd'] = 0
self.dicio['vl_slim_21_apvd'] = 0
self.dicio['vl_slim_117_apvd'] = 0

slim_Funci()

def slim_Funci(self):
self.dicio['vl_lim_ref_228'] = self.dicio['vl_lim_ref_140']
self.dicio['vl_mtp_clc_slim_228'] = self.dicio['vl_mtp_clc_slim_140']
self.dicio['vl_ftr_ajst_slim_228'] = self.dicio['vl_ftr_ajst_slim_140']

# Executa o calculo do sublimite calculado e aprovado dos produtos 140, 157, 162, 228
for prd in [140, 157, 162, 228]:
self.processaCalculo(prd)

slim_ecf()

def slim_ecf(self):
self.dicio['vl_mtp_clc_slim_155'] = self.dicio['vl_mtp_clc_slim_137']
self.dicio['vl_lim_ref_155'] = self.dicio['vl_lim_ref_137']

self.dicio['vl_mtp_clc_slim_179'] = self.dicio['vl_mtp_clc_slim_137']
self.dicio['vl_lim_ref_179'] = self.dicio['vl_lim_ref_137']
self.dicio['vl_ftr_ajst_slim_179'] = self.dicio['vl_ftr_ajst_slim_137']

# Calculando o sublimite calculado e aprovado para os produtos 137 e 155
for prd in [137, 155]:
self.processaCalculo(prd)

if self.dicio['vl_slim_155_utzd'] > self.dicio['vl_slim_155_apvd']:
self.dicio['vl_slim_155_apvd'] = self.dicio['vl_slim_155_utzd']

if self.dicio['ic_mtp_cvn_crt'] > 0:
self.processaCalculo(171)

if self.dicio['in_ctr_rsct'] == 1 and self.dicio['in_pttd'] == 'S':
self.dicio['in_ctr_rsct'] = 0

self.dicio['in_ctr_52_18'] = 0

if self.dicio['qt_idd'] > 85 and self.dicio['vl_rend_lqdo_ttl'] < 20000:
pass
else:
if (self.dicio['in_ctr_rsct'] == 1 and self.dicio['cd_prd_rsct'] == 338 and \
self.dicio['cd_mdld_rsct'] == 18) or self.dicio['in_ctra_349'] == 1 or \
self.dicio['in_ctra_349_12'] == 1:

self.dicio['vl_pstc_ecf_clcd'] = self.dicio['vl_pstc_ttl_ecf_org']
self.dicio['vl_pstc_ecf_apvd'] = self.dicio['vl_pstc_ttl_ecf_org']
self.dicio['vl_pstc_fun_bb_clcd'] = self.dicio['vl_pstc_bb_org']
self.dicio['vl_pstc_ecf_demais'] = self.dicio['vl_pstc_demais_org']

if self.dicio['vl_pstc_ecf_rec'] > 0:
if self.dicio['vl_pstc_ecf_rec'] == 0.01:
self.dicio['vl_pstc_ecf_clcd'] = 0

self.dicio['vl_pstc_fun_bb_clcd'] = 0

self.dicio['vl_pstc_ecf_demais'] = 0

else:
self.dicio['vl_pstc_ecf_clcd'] = self.dicio['vl_pstc_ecf_rec']
self.dicio['vl_pstc_fun_bb_clcd'] = self.dicio['vl_pstc_ecf_rec']
self.dicio['vl_pstc_ecf_demais'] = self.dicio['vl_pstc_ecf_rec']

self.processaCalculo(155)

if self.dicio['vl_slim_155_apvd'] == 0:
self.dicio['vl_slim_155_apvd'] = self.dicio['vl_slim_155_utzd']
if self.dicio['vl_slim_137_apvd'] == 0 and self.dicio['vl_slim_171_apvd'] == 0 and \
self.dicio['vl_slim_179_apvd'] == 0:
self.dicio['vl_pstc_ecf_clcd'] = 0
self.dicio['vl_pstc_ecf_apvd'] = 0
self.dicio['vl_pstc_ecf_demais'] = 0

self.dicio['waux_vl_80pc_pstc_ecf_apvd'] = self.dicio['vl_pstc_ecf_apvd'] * 0.80

# INFO: PERTENCE A REGRA DO CMP
#if self.dicio['waux_vl_80pc_pstc_ecf_apvd'] > self.dicio['vl_cmp_apvd']:
# self.dicio['vl_cmp_apvd'] = self.dicio['waux_vl_80pc_pstc_ecf_apvd']

if self.dicio['vl_slim_137_apvd'] > 0:
self.dicio['in_grava_cvn'] += 3

if self.dicio['vl_slim_171_apvd'] > 0:
self.dicio['in_grava_cvn'] += 5

self.processaCalculo(179)

if self.dicio['vl_slim_179_utzd'] > self.dicio['vl_slim_179_apvd']:
self.dicio['vl_slim_179_apvd'] = self.dicio['vl_slim_179_utzd']

slimApvdCdc()

def slimApvdCdc(self):
# Instancias de Classes
#cevs = ClcEstVlSlim(self.dicio)
vrsb = VrfRndSlrBnf(self.dicio)
rms = RedMtpSlim083(self.dicio)

self.dicio['ws_psct_cdc_083_c'] = 0
self.dicio['ws_psct_cdc_115_c'] = 0

if self.dicio['in_518'] == 'S':
if self.dicio['cd_crct_1682'] == 1:
self.dicio['vl_slim_173_apvd'] = 0
else:
# prd = 173
self.processaCalculo(173, 'apvd')
self.dicio['vl_slim_173_apvd'] = int(self.dicio['aux_vl_slim'])

#INCLUIR REGRA DO ANCKCCF1-IN-AUX-EMER AQUI. FALTA INCLUIR A VARIAVEL DE RECONSIDERAÇÃO FUTURAMENTE.
if self.dicio['in_bnf_astl'] == 'S' and self.dicio['in_pgt'] == 0:
self.dicio['vl_slim_173_apvd'] = 0

if self.dicio['vl_slim_173_apvd'] == 0 and self.dicio['cd_fuc'] != 2:
if self.dicio['cd_crct_1682'] == 1:
self.dicio['vl_lim_ref_131'] = 0
else:
# prd = 131
self.processaCalculo(131, 'apvd')

#INCLUIR REGRA DO ANCKCCF1-IN-AUX-EMER AQUI. FALTA INCLUIR A VARIAVEL DE RECONSIDERAÇÃO FUTURAMENTE.
if self.dicio['in_bnf_astl'] == 'S' and self.dicio['in_pgt'] == 0:
self.dicio['vl_slim_131_apvd'] = 0


self.dicio['vl_slim_130_apvd'] = 0

#INCLUIR REGRA DO ANCKCCF1-IN-AUX-EMER AQUI. FALTA INCLUIR A VARIAVEL DE RECONSIDERAÇÃO FUTURAMENTE.

if self.dicio['in_bnf_astl'] == 'S' and self.dicio['in_pgt'] == 0:
self.dicio['vl_slim_130_apvd'] = 0


if self.dicio['cd_crct_1682'] == 1:
self.dicio['vl_slim_116_apvd'] = 0
else:
# prd = 116
self.processaCalculo(116, 'apvd')

#INCLUIR REGRA DO ANCKCCF1-IN-AUX-EMER AQUI. FALTA INCLUIR A VARIAVEL DE RECONSIDERAÇÃO FUTURAMENTE.

if self.dicio['in_bnf_astl'] == 'S' and self.dicio['in_pgt'] == 0:
self.dicio['vl_slim_116_apvd'] = 0


vrsb.vrf_Rnd_Slr_Bnf()

if self.dicio['cd_crct_1682'] == 1:
self.dicio['ws_psct_cdc_083_c'] = 0
else:
self.dicio['ws_psct_cdc_083_c'] = (self.dicio['ws_psct_cdc_083_c'] * self.dicio['vl_ftr_ajst_pstc_pcld'])

if self.dicio['vl_pstc_cdc_prtt'] > self.dicio['vl_pstc_cdc_apvd']:
self.dicio['ws_psct_cdc_083_c'] = self.dicio['vl_pstc_cdc_apvd']
else:
self.dicio['ws_psct_cdc_083_c'] = self.dicio['vl_pstc_cdc_prtt']

# Teste incluido pelo Fernando para ajuste na informação do VSAM e valor
if (self.dicio['in_pgt'] and not self.dicio['in_fun'] and self.dicio['ws_psct_cdc_083_c'] > 0) or \
(self.dicio['in_pgt'] and self.dicio['cd_mtdl_anl_crd'] in (70,71,72)):
if self.dicio['ic_mtp_cvn_sal'] != 0:
self.dicio['vl_mtp_clc_slim_83'] = self.dicio['ic_mtp_cvn_sal']
self.dicio['vl_pstc_083'] = self.dicio['ws_psct_cdc_083_c']
# Chama 962000-RED-MTP-SLIM-083
rms.redMtpSlim083()
self.dicio['vl_mtp_clc_slim_83'] = self.dicio['vl_mtp_clc_slim_83'] * \
self.dicio['waux_red_mtp_slim_083']
# Conforme correio DICRE, para clientes sem convenio com FEi

# maior que 0,135335283 , zerar o multiplicador

# Retirado tratamento abaixo conforme ideia 56720
self.processaCalculo(83, 'apvd')
self.dicio['vl_slim_83_apvd'] = int(self.dicio['aux_vl_slim'])

#INCLUIR REGRA DO ANCKCCF1-IN-AUX-EMER AQUI. FALTA INCLUIR A VARIAVEL DE RECONSIDERAÇÃO FUTURAMENTE.

if self.dicio['in_bnf_astl'] == 'S' and self.dicio['in_pgt'] == 0:
self.dicio['vl_slim_83_apvd'] = 0


if self.dicio['cd_crct_1682'] == 1:
self.dicio['ws_psct_cdc_115_c'] = 0
else:
self.dicio['ws_psct_cdc_115_c'] = (self.dicio['ws_psct_cdc_115_c'] * self.dicio['vl_ftr_ajst_pstc_pcld'])
if self.dicio['ws_psct_cdc_115_c'] > self.dicio['vl_pstc_cdc_apvd']:
self.dicio['ws_psct_cdc_115_c'] = self.dicio['vl_pstc_cdc_apvd']
# prd = 115
self.processaCalculo(115, 'apvd')
self.dicio['vl_slim_115_apvd'] = int(self.dicio['aux_vl_slim'])
self.dicio['aux_redt_vcli'] = 1

if self.dicio['cd_crct_1682'] == 1:
self.dicio['vl_slim_119_apvd'] = 0
self.dicio['vl_slim_157_apvd'] = 0
self.dicio['vl_slim_156_apvd'] = 0
self.dicio['vl_slim_159_apvd'] = 0
else:
# prd = 119
self.processaCalculo(119, 'apvd')
self.dicio['vl_slim_119_apvd'] = int(self.dicio['aux_vl_slim'])

# prd = 156
self.processaCalculo(156, 'apvd')
self.dicio['vl_slim_156_apvd'] = self.dicio['aux_vl_slim']

# prd = 159
self.processaCalculo(159, 'apvd')

if self.dicio['in_anl_pmt'] == 'S':
self.dicio['vl_slim_159_apvd'] = self.dicio['vl_slim_159_clcd']
else:
self.dicio['vl_slim_159_apvd'] = int(self.dicio['aux_vl_slim'])

# Limitado valor do Credito rotativo
if self.dicio['cd_fuc'] != 2 and self.dicio['cd_crct_1682'] == 0:
if self.dicio['vl_slim_159_apvd'] > self.dicio['vl_slim_15_20_apvd']:
self.dicio['vl_slim_159_apvd'] = self.dicio['vl_slim_15_20_apvd']

#INCLUIR REGRA DO ANCKCCF1-IN-AUX-EMER AQUI. FALTA INCLUIR A VARIAVEL DE RECONSIDERAÇÃO FUTURAMENTE.

if self.dicio['in_bnf_astl'] == 'S' and self.dicio['in_pgt'] == 0:
self.dicio['vl_slim_115_apvd'] = 0
self.dicio['vl_slim_119_apvd'] = 0
self.dicio['vl_slim_156_apvd'] = 0
self.dicio['vl_slim_159_apvd'] = 0
self.dicio['vl_slim_157_apvd'] = 0

# prd = 160
self.processaCalculo(160, 'apvd')
self.dicio['vl_slim_160_apvd'] = int(self.dicio['aux_vl_slim'])
self.dicio['aux_redt_vcli'] = 1

if self.dicio['cd_crct_1682'] == 1:
self.dicio['vl_slim_161_apvd'] = 0
self.dicio['vl_slim_163_apvd'] = 0
self.dicio['vl_slim_142_apvd'] = 0
else:
if self.dicio['vl_ren_brto'] <= self.dicio['waux_vl_10slr_min'] and self.dicio['cd_sgm_anl'] in \
(9,19,25,21,30,31,55) and (self.dicio['in_cli_novo'] == 'N' or self.dicio['in_cli_novo_prtt'] == 'S'):
# prd = 161
self.processaCalculo(161, 'apvd')
self.dicio['vl_slim_161_apvd'] = int(self.dicio['aux_vl_slim'])

if self.dicio['vl_slim_161_apvd'] > self.dicio['vl_teto_slim_161']:
self.dicio['vl_slim_161_apvd'] = self.dicio['vl_teto_slim_161']

# prd = 163
self.processaCalculo(163, 'apvd')
self.dicio['vl_slim_163_apvd'] = int(self.dicio['aux_vl_slim'])

if self.dicio['gda_maior_mtp'] > self.dicio['vl_mtp_clc_slim_142']:
self.dicio['vl_mtp_clc_slim_142'] = self.dicio['gda_maior_mtp']
# prd = 142
self.processaCalculo(142, 'apvd')

#INCLUIR REGRA DO ANCKCCF1-IN-AUX-EMER AQUI. FALTA INCLUIR A VARIAVEL DE RECONSIDERAÇÃO FUTURAMENTE.

if self.dicio['in_bnf_astl'] == 'S' and self.dicio['in_pgt'] == 0:
self.dicio['vl_slim_142_apvd'] = 0
self.dicio['vl_slim_161_apvd'] = 0
self.dicio['vl_slim_163_apvd'] = 0

if self.dicio['ic_mtp_cvn_sal'] != 0 and self.dicio['ind_grava_cvn'] == 1:
self.dicio['vl_mtp_clc_slim_83'] = self.dicio['ic_mtp_cvn_sal']

slimClcdCdc()

def slimClcdCdc(self):
# Instancias de Classes
# cevs = ClcEstVlSlim(self.dicio)
rms = RedMtpSlim083(self.dicio)
vrsb = VrfRndSlrBnf(self.dicio)

self.dicio['ws_psct_cdc_083_c'] = 0
self.dicio['ws_psct_cdc_115_c'] = 0

self.dicio['aux_far_slim'] = 1

# O código tem como objetivo preparar as variaveis que serão utilizadas para o calculo da prestação calculada

# Regra geral = prestacao * respectivo multiplicador * fator de idade calculado na função 960000
# Prepara as variaveis para todos os sublimites e salva o valor do sublimite calculado após passar pela função 960000
# Preparar a formula (prestacao x fator de idade) -aplicar nos calculos dos sublimites

self.dicio['in_cli_novo'] = 'N'

if (self.dicio['cd_mtdl_anl_crd'] == 52 and self.dicio['cd_sgm_anl'] in (21, 31)) or \
self.dicio['cd_mtdl_anl_crd'] == 53:
self.dicio['in_cli_novo'] = 'S'

# Sublimites 173 (DRS), 130 (benef. 2 sal.) e 131 (pronto) sao excludentes entre si
# BB microcrédito DRS - caracteristica especial 518
if self.dicio['in_518'] == 'S':
self.processaCalculo(173, 'clcd')

# BB credito pronto
if self.dicio['vl_slim_173_clcd'] == 0 and not self.dicio['cd_fuc'] == 2:
self.processaCalculo(131, 'clcd')

# BB credito beneficio 2 salários minimos
self.dicio['vl_slim_130_clcd'] = 0

# CDC automatico
self.processaCalculo(116, 'clcd')

# BB credito salario somente para clientes que recebem pelo BB
# Chama 210000_vrf_rnd_slr_bnf
vrsb.vrf_Rnd_Slr_Bnf()

if self.dicio['vl_pstc_cdc_prtt'] > self.dicio['vl_pstc_cdc_clcd']:
self.dicio['ws_psct_cdc_083_c'] = self.dicio['vl_pstc_cdc_clcd']
else:
self.dicio['ws_psct_cdc_083_c'] = self.dicio['vl_pstc_cdc_prtt']
if (self.dicio['in_pgt'] and not self.dicio['in_fun']) or (self.dicio['in_pgt'] and \
self.dicio['cd_mtdl_anl_crd'] in (70, 71, 72)):
if self.dicio['ic_mtp_cvn_sal'] != 0:
self.dicio['vl_mtp_clc_slim_83'] = self.dicio['ic_mtp_cvn_sal']
self.dicio['vl_pstc_083'] = self.dicio['ws_psct_cdc_083_c']

# d135005_a141024: reduzir o multiplicador de calculo:
self.dicio['aux_cd_cliente'] = self.dicio['cd_cli']
# Chama 962000_red_mtp_slim_083
rms.red_Mtp_Slim_083()
self.dicio['vl_mtp_clc_slim_83'] = self.dicio['vl_mtp_clc_slim_83'] * self.dicio['waux_red_mtp_slim_083']
if self.dicio['vl_pstc_083'] != 0:

self.dicio['ind_grava_cvn'] += 1

# Conforme correio DICRE, para clientes sem convenio com fei maior que 0,135335283, zerar o multiplicador retirado
# tratamento abaixo conforme ideia 56720
if self.dicio['ic_mtp_cvn_sal'] == 0:
if self.dicio['vl_fei_cli'] > 0.135335283:
self.dicio['vl_mtp_clc_slim_83'] = 0
self.processaCalculo(83, 'clcd' )


# Sublimite 115 _ credito beneficio somente para clientes que recebem beneficio pelo BB.
if self.dicio['ws_psct_cdc_115_c'] > self.dicio['vl_pstc_cdc_clcd']:
self.dicio['ws_psct_cdc_115_c'] = self.dicio['vl_pstc_cdc_clcd']
self.processaCalculo(115, 'clcd')

self.processaCalculo(119, 'clcd')

# BB crediario PC conectado
self.processaCalculo(156, 'clcd')

# BB cred p. cartão/cheque
self.processaCalculo(159, 'clcd')

# Limitado valor do credito rotativo
if not self.dicio['cd_fuc'] == 2:
if self.dicio['vl_slim_159_clcd'] > self.dicio['vl_slim_15_20_clcd']:
self.dicio['vl_slim_159_clcd'] = self.dicio['vl_slim_15_20_clcd']

# limite transf p/cartao
self.processaCalculo(160, 'clcd')

# BB credito acessibilidade _ exceto segmentos inss e parcerias

if self.dicio['vl_ren_brto'] < self.dicio['waux_vl_10slr_min'] and \
(self.dicio['cd_sgm_anl'] == 9 or self.dicio['cd_sgm_anl'] in \
(19, 21, 25, 30, 31, 55)) and (self.dicio['in_cli_novo'] == 'N' or \
self.dicio['in_cli_novo_prtt'] == 'S'):
self.processaCalculo(161, 'clcd')

if self.dicio['vl_slim_161_clcd'] > self.dicio['vl_teto_slim_161']:
self.dicio['vl_slim_161_clcd'] = self.dicio['vl_teto_slim_161']
# BB credito parceria
self.processaCalculo(163, 'clcd')

# BB crédito renovação
if self.dicio['gda_maior_mtp'] > self.dicio['vl_mtp_clc_slim_142']:
self.dicio['vl_mtp_clc_slim_142'] = self.dicio['gda_maior_mtp']

self.processaCalculo(142, 'clcd')

trataSnlAlerta()

TrataSnlAlerta()

from parcelado.calculos.calculoFAR import CalculoFar

class TrataSnlAlerta:
def __init__(self, dicio):
self.dicio = dicio

trata_Snl_Alerta()

def trata_Snl_Alerta(self):
# Instancias de Classes

cf = CalculoFar(self.dicio)

# Regra 1 - Sinal de Alerta igual a 0
if self.dicio['cd_snl_avs_pcld'] == 0:
if self.dicio['in_lim_ant'] == 'N':
self.dicio['vl_pstc_ant_045'] = 0

if self.dicio['vl_pstc_ant_045'] > self.dicio['vl_pstc_cdc_clcd']:
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['vl_pstc_ant_045']
else:
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['vl_pstc_cdc_clcd']

# Chamada para 960000_clc_apvd_com_far

cf.calcularFar('045')

if self.dicio['ws_vl_pstc_far_apvd_045'] > self.dicio['ws_vl_pstc_far_clcd_045']:
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['ws_vl_pstc_far_apvd_045']
else:
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['ws_vl_pstc_far_clcd_045']

# Regra 2 - Sinal de Alerta igual a 0
elif self.dicio['cd_snl_avs_pcld'] == 1:
if self.dicio['in_lim_ant'] == 'N':
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['vl_pstc_cdc_clcd']
else:
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['vl_pstc_ant_045']


# Chamada para 960000_clc_apvd_com_far
cf.calcularFar('045')

if self.dicio['ws_vl_pstc_far_apvd_045'] > self.dicio['ws_vl_pstc_far_clcd_045']:
if self.dicio['ws_vl_pstc_far_apvd_045'] < self.dicio['vl_pstc_cdc_apvd']:
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['ws_vl_pstc_far_apvd_045']

else:
if self.dicio['ws_vl_pstc_far_clcd_045'] < self.dicio['vl_pstc_cdc_apvd']:
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['ws_vl_pstc_far_clcd_045']

# Regra 3 - Sinal de Alerta igual a 2, 5 e 6
elif self.dicio['cd_snl_avs_pcld'] in (2, 5, 6):
if self.dicio['in_lim_ant'] == 'N':
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['vl_pstc_cdc_clcd']
else:
if self.dicio['vl_pstc_ant_045'] < self.dicio['vl_pstc_cdc_clcd']:
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['vl_pstc_ant_045']
else:
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['vl_pstc_cdc_clcd']

# Chamada para 960000_clc_apvd_com_far
cf.calcularFar('045')

if self.dicio['ws_vl_pstc_far_apvd_045'] > self.dicio['ws_vl_pstc_far_clcd_045']:
if self.dicio['ws_vl_pstc_far_apvd_045'] < self.dicio['vl_pstc_cdc_apvd']:
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['ws_vl_pstc_far_apvd_045']

else:
if self.dicio['ws_vl_pstc_far_clcd_045'] < self.dicio['vl_pstc_cdc_apvd']:
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['ws_vl_pstc_far_clcd_045']

# Regra 4 - Sinal de Alerta igual a 4
elif self.dicio['cd_snl_avs_pcld'] == 4:
self.dicio['vl_pstc_cdc_apvd'] = (self.dicio['vl_pstc_cdc_clcd'] * \
self.dicio['vl_pc_red_pstc_clcd'] * \
self.dicio['vl_ftr_ajst_pstc_pcld'])

trata_Snl_Alerta_Vclo()

def trata_Snl_Alerta_Vclo(self):
# Instancias de Classes
cf = CalculoFar(self.dicio)

if self.dicio['cd_snl_avs_pcld'] == 0:
if self.dicio['in_lim_ant'] == 'N':
self.dicio['vl_pstc_ant_060'] = 0

if self.dicio['vl_ttl_pcl_fin'] > self.dicio['vl_pstc_ant_060']:
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['vl_ttl_pcl_fin']
else:
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['vl_pstc_ant_060']

if self.dicio['vl_pstc_vclo_apvd'] < self.dicio['vl_pstc_vclo_clcd']:
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['vl_pstc_vclo_clcd']


# Chama 950000_clc_apvd_com_far
cf.calcularFar('021')

if self.dicio['ws_vl_pstc_far_apvd_021'] > self.dicio['ws_vl_pstc_far_clcd_021']:
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['ws_vl_pstc_far_apvd_021']
else:
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['ws_vl_pstc_far_clcd_021']

elif self.dicio['cd_snl_avs_pcld'] == 1:
if self.dicio['vl_ttl_pcl_fin'] > self.dicio['vl_pstc_vclo_clcd']:
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['vl_ttl_pcl_fin']
else:
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['vl_pstc_vclo_clcd']

if self.dicio['in_lim_ant'] != 'N' and self.dicio['vl_pstc_ant_060'] < \
self.dicio['vl_pstc_vclo_apvd']:
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['vl_pstc_ant_060']

# Chama 950000_clc_apvd_com_far
cf.calcularFar('021')

if self.dicio['ws_vl_pstc_far_apvd_021'] > self.dicio['ws_vl_pstc_far_clcd_021']:
if self.dicio['ws_vl_pstc_far_apvd_021'] < self.dicio['vl_pstc_vclo_apvd']:
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['ws_vl_pstc_far_apvd_021']
else:
if self.dicio['ws_vl_pstc_far_clcd_021'] < self.dicio['vl_pstc_vclo_apvd']:
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['ws_vl_pstc_far_clcd_021']

elif self.dicio['cd_snl_avs_pcld'] in (2, 5, 6):
if self.dicio['in_lim_ant'] == 'N':
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['vl_pstc_vclo_clcd']
else:
if self.dicio['vl_pstc_vclo_clcd'] < self.dicio['vl_pstc_ant_060']:
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['vl_pstc_vclo_clcd']
else:
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['vl_pstc_ant_060']

#Chama 950000_clc_apvd_com_far
cf.calcularFar('021')

if self.dicio['ws_vl_pstc_far_apvd_021'] > self.dicio['ws_vl_pstc_far_clcd_021']:
if self.dicio['ws_vl_pstc_far_apvd_021'] < self.dicio['vl_pstc_vclo_apvd']:
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['ws_vl_pstc_far_apvd_021']
else:
if self.dicio['ws_vl_pstc_far_clcd_021'] < self.dicio['vl_pstc_vclo_apvd']:
self.dicio['vl_pstc_vclo_apvd'] = self.dicio['ws_vl_pstc_far_clcd_021']

elif self.dicio['cd_snl_avs_pcld'] == 4:
self.dicio['vl_pstc_vclo_apvd'] = (self.dicio['vl_pstc_vclo_clcd'] * \
self.dicio['vl_pc_red_pstc_clcd']) * \
self.dicio['vl_ftr_ajst_pstc_vclo']

verifEngajado()

class VerifEngajado:
def __init__(self, dicio):
self.dicio = dicio
self.dicio['waux_engajado'] = 'N'
def verif_Engajado(self, pos):
for i in range(0, self.dicio['qt_reg_epgr_engaj']):
if self.dicio['cd_epgr_engaj'][i] == self.dicio['cd_epgr_cli'][pos]:
self.dicio['waux_engajado'] = 'S'
break

verifGTFraude()

# verifGTFraude

def __init__(self, dicio):
self.dicio = dicio


def verifGTFraude(self):
cpc = CalculoPrtfCdc(self.dicio)

if self.dicio['cd_fuc'] == 1:
if self.dicio['in_frd'] in ('A', 'a'):

if self.dicio['in_pbco_gr_frd']:
if self.dicio['cd_tip_cpvt_ren'] == 'F':

# O código compara o indicador
de relacionamento do cliente para
atribuir valor a variável auxiliar de
percentual de crédito direto ao
consumidor

if self.dicio['in_rlc_cli'] in ('I', 'P', '', ' ', ' '):
self.dicio['waux_pc_cdc'] = 20

# Executa o cálculo do portifólio
de sublimite de CDC

cpc.calcularPrtfCdc()

elif self.dicio['in_rlc_cli'] == 'C':

self.dicio['waux_pc_cdc'] = self.dicio['vl_pc_cdc_rlc_c']

# Executa o cálculo do portifólio de sublimite de CDC
cpc.calcularPrtfCdc()

elif self.dicio['cd_tip_cpvt_ren'] == 'C':

if self.dicio['in_rlc_cli'] in ('I', '', ' ', ' '):

self.dicio['waux_pc_cdc'] = 80

# Executa o cálculo do portifólio de sublimite de CDC
cpc.calcularPrtfCdc()

elif self.dicio['in_rlc_cli'] == 'P':

self.dicio['waux_pc_cdc'] = self.dicio['vl_pc_cdc_rlc_p']

# Executa o cálculo do portifólio de sublimite de CDC
cpc.calcularPrtfCdc()

self.dicio['vl_pstc_vclo_clcd'] = 0

self.dicio['vl_pstc_vclo_apvd'] = 0

vrfRndSlrBnf()

Verifica natureza da ocupação para computar a renda a ser
utilizada no calculo dos sublimites 083 e 115.

from parcelado.regras.verifEngajado import VerifEngajado
import os

class VrfRndSlrBnf():

def __init__(self, dicio):
self.dicio = dicio
self.dicio['gda_epgr_ppl_cli'] = []

def vrf_Rnd_Slr_Bnf(self):
'''
Verifica natureza da ocupacao para computar a renda a ser utilizada no calculo dos
sublimites 083 e 115.
'''

# Instancias de classes
ve = VerifEngajado(self.dicio)

# Declaração de Variaveis
self.dicio['gda_epgr_ppl_cli'] = []
self.dicio['waux_vl_rnd_slr'] = 0
self.dicio['waux_vl_rnd_bnf'] = 0

if os.environ['AMBIENTE'] in ['MODELAGEM', 'DESENVOLVIMENTO']:
self.dicio['waux_mci_inss'] = 103824079
self.dicio['waux_mci_bb'] = 903485186
self.dicio['waux_mci_previ'] = 602907665

elif os.environ['AMBIENTE'] == 'HOMOLOGACAO':
self.dicio['waux_mci_inss'] = 208961759
self.dicio['waux_mci_bb'] = 130965148
self.dicio['waux_mci_previ'] = 178998134

else:
self.dicio['waux_mci_inss'] = 103824079
self.dicio['waux_mci_bb'] = 903485186
self.dicio['waux_mci_previ'] = 100186582

ix1 = 1
for ix in range(0, self.dicio['qt_reg_epgr_cli']):
if self.dicio['cd_ntz'][ix] == 0:
break

if self.dicio['in_ocp_ppl_scdr'][ix] == 'S':
if ix1 < 4:
self.dicio['gda_epgr_ppl_cli'].append(self.dicio['cd_epgr_cli'][ix])
ix1 += 1

# Verifica se cliente novo proventista para cálculo SLIM 161.
self.dicio['in_cli_novo_prtt'] = 'N'
if self.dicio['cd_rgr_rend_lqdo'][ix] == 'C' and self.dicio['in_cli_novo'] == 'S':
self.dicio['in_cli_novo_prtt'] == 'S'

# Verifica se cliente possui renda liquida para GT-FRAUDE
if self.dicio['cd_rgr_rend_lqdo'][ix] == 'C':
self.dicio['in_rlc_cli'] = 'C'

if self.dicio['cd_rgr_rend_lqdo'][ix] == 'C' or self.dicio['vl_bnf'] > 0:
if self.dicio['cd_ntz'][ix] in (2,3,7,10,11,12,14,16,17,18):
pass
elif self.dicio['cd_ntz'][ix] in (19,20):
# Chama 210001-VERIFICA-ENGAJADO
ve.verif_Engajado(ix)
if self.dicio['waux_engajado'] == 'S' and self.dicio['cd_rgr_rend_lqdo'][ix] == 'C':
self.dicio['waux_vl_rnd_slr'] += self.dicio['vl_rend_lqdo'][ix]
else:
if self.dicio['cd_epgr_cli'][ix] == self.dicio['waux_mci_inss'] and \
self.dicio['cd_ntz'][ix] == 8:
self.dicio['waux_vl_rnd_bnf'] += self.dicio['vl_rend_lqdo'][ix]
else:
if self.dicio['cd_rgr_rend_lqdo'][ix] == 'C':
self.dicio['waux_vl_rnd_slr'] += self.dicio['vl_rend_lqdo'][ix]

# Inicio - calcula prestacao com base na renda apurada acima

# ATENÇÃO : Este cálculo está sendo utilizado apenas para produtor rural!
# AVALIAR a implementacao para uso tambem pelo PF (alterar S0160)
for prd in ['083', '115']:
aux = 'slr' if prd == '083' else 'bnf'

self.dicio['ws_pstc_cdc_' + prd + '_c'] = self.dicio['vl_cfct_045'] * \
self.dicio['waux_vl_rnd_' + aux] * \
self.dicio['cd_ftr_rlc'] * \
self.dicio['vl_ftr_demp']

if (self.dicio['in_ctr_rsct'] == 1 and self.dicio['in_ptdd'] == 'N') or \
self.dicio['in_ctra_52_18'] == 1 or self.dicio['in_ctra_349'] == 1 or \
self.dicio['in_ctra_349_12'] == 1:
self.dicio['ws_pstc_cdc_083_c'] = 0
self.dicio['ws_psct_cdc_115_c'] = 0

self.dicio['vl_ren_slr_bnf'] = self.dicio['waux_vl_rnd_slr']

zeraPrestacoes()

zerar()

lass ZeraPrestacoes():

def __init__(self, dicio):
self.dicio = dicio

def zerar(self):
for tipo in ['apvd', 'clcd']:
self.dicio['vl_pstc_cdc_' + tipo ] = 0

zera_Prestacoes()

def zera_Prestacoes(self):

if self.dicio['in_cli_anot_348'] == 'S' and self.dicio['in_cli_adpc_rhbl'] != 1:
self.zerar()

if self.dicio['cd_ntz_ocp'] in (7, 10, 11, 16):
self.zerar()

if self.dicio['in_ctr_rsct'] == 1 and self.dicio['in_ptdd'] == 'N':
self.zerar()

if self.dicio['in_anot'] == 0 and self.dicio['in_ptdd'] == 'S':
self.dicio['in_ctra_52_18'] = 0

if self.dicio['in_ctra_52_18'] == 1 or self.dicio['in_anot'] in (3, 4, 5):
self.zerar()

if self.dicio['in_ctra_349'] == 1 or self.dicio['in_ctra_349_12'] == 1:
self.zerar()

if self.dicio['in_anot'] in (4, 5) and self.dicio['in_ctr_rsct'] == 0:
self.zerar()

if self.dicio['cd_ocp_ppl'] in (179, 200) or self.dicio['cd_cpcd_cvil'] in (2, 3):
if self.dicio['cd_grau_inst'] < 5:
self.zerar()

if self.dicio['cd_mtdl_anl_crd'] == 51 and self.dicio['cd_sgm_anl'] == 19 and self.dicio['in_bco_pstl'] == 'S':
self.zerar()

if self.dicio['cd_tip_bnf'] == 4 and self.dicio['cd_mtdl_anl_crd'] in (52, 53) and self.dicio['in_bco_pstl'] == 'S':
self.zerar()

if self.dicio['qt_idd'] > 85:
self.zerar()

executar()

# Instâncias de Classe e Variáveis

self.dicio = dicio
self.dicio['caminho'] = self.caminho
rpf = RegraPstcEcfFunci(self.dicio)
pp = ProcessaPrestacao(self.dicio)
vf = VerifGTFraude(self.dicio)
ca = CalculoAgrup(self.dicio)
rpc = RegrasPstc(self.dicio)

# cmp = RegraCmp(self.dicio)

ts = TrataSLim(self.dicio)
self.dicio['waux_vl_2slr_min'] = 2 * self.dicio['vl_slr_min']
self.dicio['waux_vl_10slr_min'] = 10 * self.dicio['vl_slr_min']
if self.dicio['vl_slim_15_apvd'] > self.dicio['vl_slim_20_apvd']:
self.dicio['vl_slim_15_20_apvd'] = self.dicio['vl_slim_15_apvd']
else:
self.dicio['vl_slim_15_20_apvd'] = self.dicio['vl_slim_20_apvd']
if self.dicio['vl_slim_15_clcd'] > self.dicio['vl_slim_20_clcd']:
self.dicio['vl_slim_15_20_clcd'] = self.dicio['vl_slim_15_clcd']
else:
self.dicio['vl_slim_15_20_clcd'] = self.dicio['vl_slim_20_clcd']
if self.dicio['cd_fuc'] == 1:
pp.procPrestacao()
rpf.aplicaRegraPstcEcfFunci()
rpc.aplicarRegraPstcVclo()

# cmp.aplicaRegraCMP()

ts.slimClcdCdc()
ts.slimApvdCdc()

# Executa o calculo de grupo para
RAO

ca.calcularGrupos("CDC")
ts.slim_Vclo()
ts.slim_ecf()

# Executa o calculo de grupo para
ECF

ca.calcularGrupos("ECF")
ts.slim_Funci()

# Executa o calculo de grupo para
RAO

ca.calcularGrupos("RAO")

# Executa o calculo de grupo para
Funcionários

ca.calcularGrupos("FUNCI")

# Executa o calculo de grupo para
Veículos

ca.calcularGrupos("VCLO")

# Executa o calculo de grupo para
Rede Externa

ca.calcularGrupos("RDEX")

# Executa o calculo de blocos

ca.calcularBloco()

# Aciona o Verifica GT Fraude

vf.verifGTFraude()

Ancs0160

# ANCS0160

from parcelado.regras.regrasPstc import RegrasPstc

class ANCS0160:
def __init__(self, dicio):
self.dicio = dicio

self.dicio['wgda_teto_pstc_cdc'] = 0
def ancs0160(self):

# Instâncias de Classe

rpc = RegrasPstc(self.dicio)

if self.dicio['cd_status_cli'] != 2:
if self.dicio['cd_status_cli'] == 1 and self.dicio['cd_tip_bnf'] < 4:
if self.dicio['in_anot'] == 4:
self.dicio['in_anot'] = 0
else:
self.dicio['vl_pstc_cdc_clcd'] = 0
self.dicio['vl_pstc_cdc_apvd'] = 0
return

# Cálculo de 40% e 80% da renda
parametrizada

self.dicio['wgda_vl_pc40_rnd_parm_teto'] = self.dicio['vl_ren_prtz_teto'] * 0.40
self.dicio['wgda_vl_pc80_rnd_parm_teto'] = self.dicio['vl_ren_prtz_teto'] * 0.80

# Chamada para 900000-PSTC-CDC-PROVENTISTA

rpc.aplicaRegraPstcProven()
if self.dicio['cd_sgm_anl'] in (9, 19, 21, 25, 30, 31, 39, 55):

# Chamada para calcPstcCorren

rpc.aplicaRegraPstcCorren()
elif self.dicio['cd_sgm_anl'] in (14,
16):

# Chamada para 300000-CALCULO-PSTC-PARC

rpc.aplicaRegraPstcParc()
elif self.dicio['cd_sgm_anl'] == 13:

# Chamada para 200000-CALCULO-PSTC-INSS

rpc.aplicaRegraPstcInss()

ProcPrestacao

ProcessaPrestacao()

# Instância de Classe

c0160 = ANCS0160(self.dicio)
c0160.ancs0160()

if self.dicio['in_anl_pmt'] == 'S':
self.dicio['vl_pstc_cdc_apvd'] = self.dicio['vl_pstc_cdc_clcd']

# Incluir regra do ANCKCCF1-IN-AUX-EMER aqui. Falta incluir a variável de reconsideração futuramente.

f self.dicio['in_bnf_astl'] == 'S' and self.dicio['in_pgt'] == 0:
self.dicio['vl_pstc_cdc_apvd'] = 0
# OBS: NO COBOL ELE ATRIBUI ZERO DUAS VEZES PARA O CDC-APVD

db

configuração

config_erro