def saveMongo(self, codiEmp, cgceMatriz, companieMonthsAmountNotes): dateStart = retornaCampoComoData('01/01/2021') dateNow = datetime.today() - relativedelta(months=1) year = dateStart.year startYear = dateStart.year startMonth = dateStart.month endYear = dateNow.year endMonth = dateNow.month while year <= endYear: months = extractFunctions.returnMonthsOfYear(year, startMonth, startYear, endMonth, endYear) print('\t\t - ', end='') for month in months: companieDataToSave = {} monthYearFormated = f'{month:0>2}/{year}' print(f'{monthYearFormated}, ', end='') amountNotaSaida = list(filter(lambda companieMonths: companieMonths['comp'][:10] == f"{year}-{month:0>2}-01" \ and companieMonths['tipo'] == 'SAIDA', companieMonthsAmountNotes)) amountNotaSaida = analyzeIfFieldIsValidMatrix(amountNotaSaida, 1, []) amountNotaEntrada = list(filter(lambda companieMonths: companieMonths['comp'][:10] == f"{year}-{month:0>2}-01" \ and companieMonths['tipo'] == 'ENTRADA', companieMonthsAmountNotes)) amountNotaEntrada = analyzeIfFieldIsValidMatrix(amountNotaEntrada, 1, []) amountNotaServico = list(filter(lambda companieMonths: companieMonths['comp'][:10] == f"{year}-{month:0>2}-01" \ and companieMonths['tipo'] == 'SERVICO', companieMonthsAmountNotes)) amountNotaServico = analyzeIfFieldIsValidMatrix(amountNotaServico, 1, []) companieDataToSave['qtd_notas_saidas_operacao'] = analyzeIfFieldIsValid(amountNotaSaida, 'qtd_notas_operacao', 0) companieDataToSave['qtd_notas_saidas_operacao_dori'] = analyzeIfFieldIsValid(amountNotaSaida, 'qtd_notas_operacao_dori', 0) companieDataToSave['qtd_notas_entradas_operacao'] = analyzeIfFieldIsValid(amountNotaEntrada, 'qtd_notas_operacao', 0) companieDataToSave['qtd_notas_entradas_operacao_dori'] = analyzeIfFieldIsValid(amountNotaEntrada, 'qtd_notas_operacao_dori', 0) companieDataToSave['qtd_notas_servicos_operacao'] = analyzeIfFieldIsValid(amountNotaServico, 'qtd_notas_operacao', 0) companieDataToSave['qtd_notas_servicos_operacao_dori'] = analyzeIfFieldIsValid(amountNotaServico, 'qtd_notas_operacao_dori', 0) companieDataToSave['codi_emp'] = codiEmp companieDataToSave['cgce_matriz'] = cgceMatriz companieDataToSave['competence'] = f'{year}-{month:0>2}' self._collection.update_one( { "codi_emp": companieDataToSave['codi_emp'], "competence": companieDataToSave['competence'] }, { "$set": companieDataToSave }, upsert=True ) print('') year += 1
def sumAmountPaidPerLote(self, valuesOfFile): amountPaidPerLote = {} valuesOfFileWithAmountPaid = [] for key, currentLine in enumerate(valuesOfFile): previousLine = funcoesUteis.analyzeIfFieldIsValidMatrix( valuesOfFile, key - 1, {}, True) previousLine = {} if key == 0 else previousLine previousNumberLote = funcoesUteis.analyzeIfFieldIsValid( previousLine, "numberLote", 0) currentNumberLote = funcoesUteis.analyzeIfFieldIsValid( currentLine, "numberLote") amountPaid = funcoesUteis.analyzeIfFieldIsValid( currentLine, "amountPaid") if previousNumberLote == currentNumberLote: amountPaidPerLote[currentNumberLote] += amountPaid else: amountPaidPerLote[currentNumberLote] = amountPaid for key, data in enumerate(valuesOfFile): numberLote = funcoesUteis.analyzeIfFieldIsValid(data, "numberLote") data['amountPaidPerLote'] = round(amountPaidPerLote[numberLote], 2) valuesOfFileWithAmountPaid.append(data) return valuesOfFileWithAmountPaid
def searchIfANote(self, historic): positionNote = -1 noteCorrect = "" if historic.find(' NUMERO') >= 0: positionNote = historic.find(' NUMERO') + len(' NUMERO') if historic.find(' CUPOM') >= 0: positionNote = historic.find(' CUPOM') + len(' NUMERO') if historic.find(' NF') >= 0: positionNote = historic.find(' NF') + len(' NF') if positionNote >= 0: note = historic[positionNote:].lstrip() noteSplitHyphen = note.split('-') noteSplitSpace = note.split(' ') noteHyphenOne = funcoesUteis.analyzeIfFieldIsValidMatrix(noteSplitHyphen, 1).strip() noteHyphenTwo = funcoesUteis.analyzeIfFieldIsValidMatrix(noteSplitHyphen, 2).strip() if noteHyphenOne == "": noteHyphen = noteHyphenTwo.split(' ')[0].strip() else: noteHyphen = noteHyphenOne noteSpace = funcoesUteis.analyzeIfFieldIsValidMatrix(noteSplitSpace, 1).strip() if noteSpace.find('-') >= 0: noteCorrect = noteHyphen else: noteCorrect = noteSpace noteIsNumeric = funcoesUteis.treatNumberField(noteCorrect, isInt=True) if noteIsNumeric > 0: noteCorrect == noteCorrect else: noteCorrect = "" return noteCorrect
def process(self): valuesOfLine = {} isProofTransferencia = False nameProvider = "" historic = "" amountPaid = float(0) account = "" for data in self._dataFile: if isProofTransferencia == False and data.find( 'COMPROVANTE DE TRANSFERENCIA') >= 0: isProofTransferencia = True data = str(data) dataSplit = data.split(':') fieldOne = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 1)) fieldTwo = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 2)) if fieldOne.count('IDENTIFICACAO NO EXTRATO') > 0: historic = funcoesUteis.treatTextField(fieldTwo) if fieldOne.count('CONTA DEBITADA') > 0: self._accountDebitOrCredit = 'DEBIT' elif fieldOne.count('CONTA CREDITADA') > 0: self._accountDebitOrCredit = 'CREDIT' if self._accountDebitOrCredit == 'DEBIT': if fieldOne.count('AGENCIA') > 0: account = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 3)) account = str(funcoesUteis.treatNumberField(account)) # account = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(account.split('-'), 1)) # if account.find(' ') > 0: # account = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(account.split(' '), 1)) elif self._accountDebitOrCredit == 'CREDIT': if fieldOne == "NOME": nameProvider = fieldTwo if fieldOne.count("VALOR") > 0: amountPaid = funcoesUteis.treatDecimalField(fieldTwo) for valueOfLineDatePayment in self._valuesOfLineDatePayment: if data[0:len(valueOfLineDatePayment )] == valueOfLineDatePayment: paymentDate = funcoesUteis.treatTextField( data[len(valueOfLineDatePayment) + 1:len(valueOfLineDatePayment) + 11]) if paymentDate.find('.') >= 0: paymentDate = funcoesUteis.retornaCampoComoData( paymentDate.replace('.', '/')) else: paymentDate = funcoesUteis.retornaCampoComoData( paymentDate) if paymentDate is not None and amountPaid > 0 and isProofTransferencia is True: valuesOfLine = { "paymentDate": paymentDate, "nameProvider": nameProvider, "cgceProvider": '', "dueDate": '', "bank": 'ITAU', "account": account, "amountPaid": round(amountPaid, 2), "historic": historic, "category": 'TRANSFERENCIA', "cgcePaying": '', "foundProof": True, "amountPaidPerLote": round(amountPaid, 2), "wayFile": self._file } return valuesOfLine.copy()
def process(self, file): # se não for desta classe nem segue pra frente if self.isProof(file) is None: return [] funcoesUteis.updateFilesRead(self._wayTempFilesRead, file.replace('.txt', '.pdf'), 'ProofsPaymentsSantander') valuesOfLine = {} valuesOfFile = [] dataFile = leTxt(file, treatAsText=True, removeBlankLines=True) nameProvider = "" historic = "" dueDate = None paymentDate = None company = "" cnpjProvider = "" amountPaid = float(0) amountOriginal = float(0) amountInterest = float(0) category = "" bank = "SANTANDER" account = "" for data in dataFile: data = str(data) dataSplit = data.split(':') fieldOne = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 1)) fieldTwo = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 2)) if data.find('CONTA CORRENTE:') >= 0: account = data[data.find('CONTA CORRENTE:') + 15:] account = funcoesUteis.treatTextField(account) accountSplit = account.split('-') account = f"{funcoesUteis.analyzeIfFieldIsValidMatrix(accountSplit, 1)}{funcoesUteis.analyzeIfFieldIsValidMatrix(accountSplit, 2)}" if data.find('BENEFICIARIO ORIGINAL') >= 0: self._beneficiaryOrPayer = 'BENEFICIARIO' elif data.count('PAGADOR ORIGINAL') > 0: self._beneficiaryOrPayer = 'PAGADOR' if self._beneficiaryOrPayer == 'PAGADOR': pass elif self._beneficiaryOrPayer == 'BENEFICIARIO': if fieldOne == "RAZAO SOCIAL": nameProvider = fieldTwo.replace('RAZAO SOCIAL', '') if fieldOne == "CNPJ": cnpjProvider = fieldTwo.replace('CNPJ', '') if fieldOne == "DATA DE VENCIMENTO": dueDate = funcoesUteis.transformaCampoDataParaFormatoBrasileiro( funcoesUteis.retornaCampoComoData(fieldTwo)) if fieldOne.count("VALOR NOMINAL") > 0: amountOriginal = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne.count("ENCARGOS") > 0: amountInterest = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne.count("TOTAL A COBRAR") > 0: amountPaid = funcoesUteis.treatDecimalField(fieldTwo) if amountInterest > 0: amountOriginal = amountPaid - amountInterest # é necessário fazer pois as vezes tem juros mas o valor nominal tá igual ao valor pago else: amountInterest = amountPaid - amountOriginal # é necessário fazer pois as vezes tem juros, mas não tem o campo encargos if fieldOne == "DATA DA TRANSACAO": paymentDate = funcoesUteis.retornaCampoComoData(fieldTwo) if paymentDate is not None and amountPaid > 0: valuesOfLine = { "paymentDate": paymentDate, "nameProvider": nameProvider, "cnpjProvider": cnpjProvider, "dueDate": dueDate, "bank": bank, "account": account, "amountPaid": amountPaid, "amountDiscount": float(0), "amountInterest": amountInterest, "amountOriginal": amountOriginal, "historic": historic, "category": category, "company": company, "foundProof": True } valuesOfFile.append(valuesOfLine.copy()) paymentDate = None amountPaid = float(0) return valuesOfFile
def process(self): valuesOfLine = {} isProofFileThisClass = False nameProvider = "" cgceProvider = "" historic = "" amountPaid = float(0) account = "" dueDate = None amountOriginal = float(0) amountDiscount = float(0) amountInterest = float(0) paymentDate = None for data in self._dataFile: # if isProofFileThisClass == False and data.find('TIPO DE PAGAMENTO PIX') >= 0: # isProofFileThisClass = True data = str(data) dataSplitTwoPoints = data.split(':') fieldOne = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix( dataSplitTwoPoints, 1)) fieldTwo = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix( dataSplitTwoPoints, 2)) if data.find('DADOS DO PAGADOR') >= 0: self._typeLineRead = 'PAGADOR' elif data.find('DADOS DO RECEBEDOR') >= 0: self._typeLineRead = 'RECEBEDOR' elif data.find('DADOS DA TRANSACAO') >= 0: self._typeLineRead = 'TRANSACAO' if self._typeLineRead == 'PAGADOR': if fieldOne.count('AGENCIA/CONTA') > 0: account = funcoesUteis.analyzeIfFieldIsValidMatrix( fieldTwo.split('/'), 2) account = str(funcoesUteis.treatNumberField(account)) if fieldOne.count('CPF / CNPJ') > 0: cgcePaying = fieldTwo elif self._typeLineRead == 'RECEBEDOR': if fieldOne == "NOME DO RECEBEDOR": nameProvider = fieldTwo if fieldOne.count('CPF / CNPJ') > 0: cgceProvider = funcoesUteis.treatNumberField(fieldTwo) elif self._typeLineRead == 'TRANSACAO': if fieldOne == "VALOR": amountPaid = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne.count('DATA DA TRANSF') > 0: paymentDate = funcoesUteis.retornaCampoComoData(fieldTwo) if fieldOne.count('TIPO DE PAGAMENTO') > 0: # print(fieldOne, fieldTwo, paymentDate, amountPaid, isProofFileThisClass) if paymentDate is not None and amountPaid > 0: valuesOfLine = { "paymentDate": paymentDate, "nameProvider": nameProvider, "cgceProvider": cgceProvider, "dueDate": dueDate, "bank": 'ITAU', "account": account, "amountPaid": round(amountPaid, 2), "amountInterest": round(amountInterest, 2), "amountDiscount": round(amountDiscount, 2), "amountOriginal": round(amountOriginal, 2), "historic": historic, "category": 'PIX', "cgcePaying": cgcePaying, "foundProof": True, "amountPaidPerLote": round(amountPaid, 2), "wayFile": self._file } return valuesOfLine.copy()
def process(self, jsonNF): nf = '' productsXML = [] typeNF = '' noteHasProducts = False products = readJson(jsonNF) if len(products) == 0: return "" for key, product in enumerate(products): codi_emp = product['codi_emp'] cgce_emp = self.returnDataEmp(codi_emp) # ignora empresas inativas if cgce_emp is None: continue keyNF = product['chave_nfe'] # ignora notas que não são NF-e if keyNF == "" or keyNF is None: continue emissao = product['emissao'] emissao = funcoesUteis.retornaCampoComoData(emissao, 2) month = emissao.month year = emissao.year previousProduct = funcoesUteis.analyzeIfFieldIsValidMatrix( products, key - 1) previousKeyNF = funcoesUteis.analyzeIfFieldIsValid( previousProduct, 'chave_nfe') # busca os dados das notas de entradas if jsonNF.find('entradas_produtos') >= 0: typeNF = 'Entradas' if jsonNF.find('saidas_produtos') >= 0: typeNF = 'Saidas' if keyNF != previousKeyNF or len(products) == 1: wayXml = os.path.join(self._wayToReadXMLs, f'{codi_emp} -', f'{str(year)}-{month:0>2}', f'{typeNF}', f'{keyNF}.xml') callReadXmls = CallReadXmls(wayXml) nf = callReadXmls.process() productsXML = funcoesUteis.analyzeIfFieldIsValid( nf, 'produtos') noteHasProducts = False if len(productsXML) == 0 else True # quando existe apenas um produto no XML ele não cria um array de produtos, e sim apenas um objeto. Todavia, pra função de # comparação funcionar preciso que seja um array. As linhas abaixo fazem esta análise e cria o array quando necessário productsWhenExistOneProductXML = [] onlyProductInXML = funcoesUteis.analyzeIfFieldIsValid( productsXML, 'prod', False) if onlyProductInXML is not False: productsWhenExistOneProductXML.append(productsXML) productsXML = productsWhenExistOneProductXML productXML = self.returnProductComparation(product, productsXML) if productXML is not None: valueComparationBetweenAccountSystemAndXML = productXML[ 'valueComparationBetweenAccountSystemAndXML'] # deleta o campo pois pra remover o productXML do arrays de products as informações tem que ser idênticas del productXML['valueComparationBetweenAccountSystemAndXML'] # remove o produto pra ele não processar 2 vezes dizendo como seria de outro produto productsXML.remove(productXML) else: valueComparationBetweenAccountSystemAndXML = 0 if valueComparationBetweenAccountSystemAndXML <= 0.3 and noteHasProducts is True: dataProcess = { "codiEmp": codi_emp, "keyNF": keyNF, "typeNF": typeNF[:3].upper(), "productDominio": product, "productXML": productXML, "valueComparationBetweenAccountSystemAndXML": valueComparationBetweenAccountSystemAndXML } self.saveResultProcess(dataProcess)
def process(self): valuesOfLine = {} isTransferencia = False nameProvider = "" cgceProvider = '' historic = "" amountPaid = float(0) account = "" amountOriginal = float(0) amountDiscount = float(0) amountInterest = float(0) amountFine = float(0) paymentDate = None for data in self._dataFile: if isTransferencia == False and data.find('COMPROVANTE DE TRANSF') >= 0: isTransferencia = True data = str(data) dataSplit = data.split(':') fieldOne = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 1)) fieldTwo = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 2)) fieldThree = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 3)) if fieldOne.count('DO DOCUMENTO') > 0: self._accountDebitOrCredit = 'DEBIT' elif fieldOne.count('FAVORECIDO') > 0: self._accountDebitOrCredit = 'CREDIT' if fieldTwo.count("DATA DA TRANSF") > 0: paymentDate = funcoesUteis.retornaCampoComoData(fieldThree) if self._accountDebitOrCredit == 'DEBIT': if fieldOne == 'CONTA': account = str(funcoesUteis.treatNumberField(fieldTwo, isInt=True)) if fieldOne == 'NOME': nameProvider = fieldTwo if fieldOne == 'CPF': cgceProvider = fieldTwo if fieldOne == 'CNPJ': cgceProvider = fieldTwo if fieldOne == "VALOR": amountPaid = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne.count("DATA DA TRANSF") > 0: paymentDate = funcoesUteis.retornaCampoComoData(fieldTwo) if fieldOne == "DESCRICAO": if paymentDate is not None and amountPaid > 0 and isTransferencia is True: valuesOfLine = { "paymentDate": paymentDate, "nameProvider": nameProvider, "cgceProvider": cgceProvider, "dueDate": None, "bank": 'AMAZONIA', "account": account, "amountPaid": round(amountPaid, 2), "amountInterest": round(amountInterest, 2), "amountDiscount": round(amountDiscount, 2), "amountFine": round(amountFine, 2), "amountOriginal": round(amountOriginal, 2), "historic": historic, "category": 'TRANSFERENCIA', "cgcePaying": "", "foundProof": True, "amountPaidPerLote": round(amountPaid, 2), "wayFile": self._file } return valuesOfLine.copy()
def process(self): valuesOfLine = {} isProofDefaultSispag = False nameProvider = "" namePayee = "" historic = "" dueDate = None cgcePaying = "" cnpjProvider = "" amountPaid = float(0) category = "" bank = "ITAU" account = "" for data in self._dataFile: data = str(data) dataSplit = data.split(':') fieldOne = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 1)) fieldTwo = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 2)) if fieldOne.count('COMPROVANTE DE OPERACAO') > 0: category = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(data.split('-'), 2)) if fieldOne.count('PAGAMENTO COM CODIGO DE BARRAS') > 0: category = 'PAGTO COD BARRA' if fieldOne.count("PAGAMENTO DE CONCESSIONARIAS") > 0: category = 'PAGTO CONCESSIONARIA' if fieldOne.count("FGTS") > 0 or fieldOne.count("GRRF") > 0: category = 'PAGTO FGTS-GRRF' if fieldOne.count("GUIA DE RECOLHIMENTO") > 0: category = 'PAGTO GRF' historic = funcoesUteis.treatTextField(data) if fieldOne.count("IDENTIFICACAO NO EXTRATO") > 0: historic = fieldTwo if fieldOne.count('CONTA') > 0 and fieldOne.count('DEBITADA') > 0: self._accountDebitOrCredit = 'DEBIT' elif fieldOne.count('CONTA A SER CREDITADA') > 0 or fieldOne.count('DADOS DO PAGAMENTO') > 0: self._accountDebitOrCredit = 'CREDIT' if self._accountDebitOrCredit == 'DEBIT': if fieldOne.count('AGENCIA') > 0: account = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 3)) account = str(funcoesUteis.treatNumberField(account)) # account = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(account.split('-'), 1)) # if account.find(' ') > 0: # account = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(account.split(' '), 1)) elif self._accountDebitOrCredit == 'CREDIT': if fieldOne == "NOME": nameProvider = fieldTwo if fieldOne == "NOME DO FAVORECIDO": nameProvider = fieldTwo namePayee = nameProvider if fieldOne == "INFORMACOES FORNECIDAS PELO PAGADOR": historic = fieldTwo if fieldOne == "DATA DE VENCIMENTO": dueDate = funcoesUteis.transformaCampoDataParaFormatoBrasileiro(funcoesUteis.retornaCampoComoData(fieldTwo)) if ( fieldOne.count("CPF") > 0 or fieldOne.count("CNPJ") > 0 ) and fieldOne.count("PAGADOR") > 0: cgcePaying = funcoesUteis.treatNumberField(fieldTwo) if ( fieldOne.count("CPF") > 0 or fieldOne.count("CNPJ") > 0 ) and fieldOne.count("PAGADOR") == 0: cnpjProvider = funcoesUteis.treatNumberField(fieldTwo) if fieldOne.count("VALOR") > 0: amountPaid = funcoesUteis.treatDecimalField(fieldTwo) # quando é pagamento de imposto não tem o nome do fornecedor, o dados vem na informação complementar if historic != "" and dueDate == "" and namePayee == "": nameProvider = historic # se o nome do fornecedor ainda for vazio, então considero a categoria como fornecedor if nameProvider == "" and category != "": nameProvider = category for valueOfLineDatePayment in self._valuesOfLineDatePayment: if data[0 : len(valueOfLineDatePayment) ] == valueOfLineDatePayment: paymentDate = funcoesUteis.treatTextField(data[len(valueOfLineDatePayment)+1:len(valueOfLineDatePayment)+11]) paymentDate = funcoesUteis.retornaCampoComoData(paymentDate.replace('.', '/')) if paymentDate is not None and amountPaid > 0: valuesOfLine = { "paymentDate": paymentDate, "nameProvider": nameProvider, "cgceProvider": cnpjProvider, "dueDate": dueDate, "bank": bank, "account": account, "amountPaid": round(amountPaid, 2), "historic": historic, "category": category, "cgcePaying": cgcePaying, "foundProof": True, "amountPaidPerLote": round(amountPaid, 2), "wayFile": self._file } return valuesOfLine.copy()
def process(self): valuesOfLine = {} isProofAgendamento = False nameProvider = "" historic = "" amountPaid = float(0) account = "" amountOriginal = float(0) amountDiscount = float(0) amountInterest = float(0) amountFine = float(0) paymentDate = None for data in self._dataFile: if isProofAgendamento == False and data.find( 'COMPROVANTE DE AGENDAMENTO') >= 0: isProofAgendamento = True data = str(data) dataSplit = data.split(':') fieldOne = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 1)) fieldTwo = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 2)) # faço esta separação pra poder identificar o que deve ser lido, pois os dados estão na linha abaixo e não onde 'BENEFICIARIO' por exemplo if fieldOne.count('CONTA A SER DEBITADA') > 0: self._typeLineRead = 'conta_debitada' elif fieldOne.count('DADOS DO PAGAMENTO') > 0: self._typeLineRead = 'dados_pagamento' elif fieldOne.count('DADOS DO BENEFICIARIO') > 0: self._typeLineRead = 'beneficiario' elif fieldOne.count('DADOS DO PAGADOR') > 0: self._typeLineRead = 'pagador' elif fieldOne.count('DADOS DO BOLETO') > 0: self._typeLineRead = 'dados_boleto' if self._typeLineRead == "conta_debitada": if fieldOne.count('AGENCIA') > 0: account = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 3)) account = str(funcoesUteis.treatNumberField(account)) # account = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(account.split('-'), 1)) # if account.find(' ') > 0: # account = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(account.split(' '), 1)) if self._typeLineRead == 'beneficiario': if fieldOne == "NOME": nameProvider = fieldTwo if fieldOne == "RAZAO SOCIAL": nameProvider = fieldTwo if fieldOne.count('CNPJ') > 0 or fieldOne.count('CPF') > 0: cgceProvider = funcoesUteis.treatNumberField(fieldTwo) if self._typeLineRead == 'pagador': if fieldOne.count('CNPJ') > 0 or fieldOne.count('CPF') > 0: cgcePaying = funcoesUteis.treatNumberField(fieldTwo) elif self._typeLineRead == 'dados_boleto': if fieldOne == "DATA DE VENCIMENTO": dueDate = funcoesUteis.retornaCampoComoData(fieldTwo) if fieldOne == "DATA DO PAGAMENTO": paymentDate = funcoesUteis.retornaCampoComoData(fieldTwo) if fieldOne == "VALOR DO DOCUMENTO": amountOriginal = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "DESCONTO": amountDiscount = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "JUROS/MORA": amountInterest = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "MULTA": amountFine = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "VALOR DO PAGAMENTO": amountPaid = funcoesUteis.treatDecimalField(fieldTwo) for valueOfLineDatePayment in self._valuesOfLineDatePayment: if data[0:len(valueOfLineDatePayment )] == valueOfLineDatePayment: if paymentDate is None: # apenas se for None, pq o de agendamento tem um campo especifico pra data paymentDate = funcoesUteis.treatTextField( data[len(valueOfLineDatePayment) + 1:len(valueOfLineDatePayment) + 11]) if paymentDate.find('.') >= 0: paymentDate = funcoesUteis.retornaCampoComoData( paymentDate.replace('.', '/')) else: paymentDate = funcoesUteis.retornaCampoComoData( paymentDate) if paymentDate is not None and amountPaid > 0 and isProofAgendamento is True: valuesOfLine = { "paymentDate": paymentDate, "nameProvider": nameProvider, "cgceProvider": cgceProvider, "dueDate": dueDate, "bank": 'ITAU', "account": account, "amountPaid": round(amountPaid, 2), "amountInterest": round(amountInterest, 2), "amountDiscount": round(amountDiscount, 2), "amountFine": round(amountFine, 2), "amountOriginal": round(amountOriginal, 2), "historic": historic, "category": 'AGENDAMENTO', "cgcePaying": cgcePaying, "foundProof": True, "amountPaidPerLote": round(amountPaid, 2), "wayFile": self._file } return valuesOfLine.copy()
def process(self): valuesOfFile = [] valuesOfLine = {} isPagamento = False cgceProvider = '' cgcePaying = '' nameProvider = "" historic = "" amountPaid = float(0) account = "" amountOriginal = float(0) amountDiscount = float(0) amountInterest = float(0) amountFine = float(0) paymentDate = None dueDate = None countQtdDataNecessaryToProofIsValid = 0 for data in self._dataFile: if data.find('COMPROVANTE DE TRANSACAO BANCARIA') >= 0: countQtdDataNecessaryToProofIsValid = 0 countQtdDataNecessaryToProofIsValid += 1 if data.find('TRANSACAO ACIMA FOI REALIZADA') >= 0: countQtdDataNecessaryToProofIsValid += 1 if countQtdDataNecessaryToProofIsValid >= 2: isPagamento = True data = str(data) dataSplit = data.split(':') fieldOne = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 1)) fieldTwo = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 2)) # fieldThree = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 3)) if fieldOne == 'CONTA DE DEBITO': account = funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 4) account = account.split('|') account = funcoesUteis.analyzeIfFieldIsValidMatrix(account, 1) account = account.split('-') account = funcoesUteis.treatNumberFieldInVector(account, 1, isInt=True) account = str(account) if data.count('RAZAO SOCIAL') > 0 and data.count('SACADOR') == 0: positionRazaoSocial = data.find('RAZAO SOCIAL') + len('RAZAO SOCIAL') nameProvider = funcoesUteis.treatTextField(data[positionRazaoSocial:]) if fieldOne.count('CNPJ') > 0 and fieldOne.count("BENEFICIARIO") > 0: cgceProvider = fieldTwo if fieldOne.count('CNPJ') > 0 and fieldOne.count("PAGADOR") > 0: cgcePaying = fieldTwo if fieldOne == "DATA DE DEBITO": paymentDate = funcoesUteis.retornaCampoComoData(fieldTwo) if fieldOne == "DATA DE VENCIMENTO": dueDate = funcoesUteis.retornaCampoComoData(fieldTwo) if fieldOne == "VALOR": amountOriginal = funcoesUteis.treatDecimalField(fieldTwo, decimalSeparator='.') if fieldOne.count('DESCONTO') > 0: amountDiscount = funcoesUteis.treatDecimalField(fieldTwo, decimalSeparator='.') if fieldOne.count('MULTA') > 0: amountFine = funcoesUteis.treatDecimalField(fieldTwo, decimalSeparator='.') if fieldOne.count('JUROS') > 0: amountInterest = funcoesUteis.treatDecimalField(fieldTwo, decimalSeparator='.') if fieldOne == "VALOR TOTAL": amountPaid = funcoesUteis.treatDecimalField(fieldTwo, decimalSeparator='.') if fieldOne == "DESCRICAO": historic = funcoesUteis.treatDecimalField(fieldTwo) if data.find('TRANSACAO ACIMA FOI REALIZADA') >= 0: if paymentDate is not None and amountPaid > 0 and isPagamento is True: valuesOfLine = { "paymentDate": paymentDate, "nameProvider": nameProvider, "cgceProvider": cgceProvider, "dueDate": dueDate, "bank": 'BRADESCO', "account": account, "amountPaid": round(amountPaid, 2), "amountInterest": round(amountInterest, 2), "amountDiscount": round(amountDiscount, 2), "amountFine": round(amountFine, 2), "amountOriginal": round(amountOriginal, 2), "historic": historic, "category": '', "cgcePaying": cgcePaying, "foundProof": True, "amountPaidPerLote": round(amountPaid, 2), "wayFile": self._file } valuesOfFile.append(valuesOfLine.copy()) return valuesOfFile
def process(self): valuesOfLine = {} isProofPagamentoBoleto = False nameProvider = "" cgceProvider = "" historic = "" amountPaid = float(0) account = "" dueDate = None amountOriginal = float(0) amountDiscount = float(0) amountInterest = float(0) for data in self._dataFile: if isProofPagamentoBoleto == False and data.find( 'PAGAMENTO DE BOLETO') >= 0: isProofPagamentoBoleto = True data = str(data) dataSplitTwoPoints = data.split(':') dataSplitSpace = data.split(' ') fieldOne = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix( dataSplitTwoPoints, 1)) fieldTwo = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix( dataSplitTwoPoints, 2)) if fieldOne.count('AGENCIA/CONTA') > 0: account = funcoesUteis.analyzeIfFieldIsValidMatrix( fieldTwo.split('/'), 2) account = str(funcoesUteis.treatNumberField(account)) # account = str(funcoesUteis.treatNumberField(funcoesUteis.analyzeIfFieldIsValidMatrix(account.split('-'), 1), isInt=True)) cgcePaying = funcoesUteis.treatNumberField( funcoesUteis.analyzeIfFieldIsValidMatrix( dataSplitTwoPoints, 3)) # faço esta separação pra poder identificar o que deve ser lido, pois os dados estão na linha abaixo e não onde 'BENEFICIARIO' por exemplo if fieldOne == 'BENEFICIARIO': self._typeLineRead = 'beneficiario' elif fieldOne.count('VALOR DO BOLETO') > 0 or fieldOne.count( 'VALOR DO DOCUMENTO') > 0: self._typeLineRead = 'valor_boleto' elif fieldOne.count('DESCONTO') > 0 and fieldOne.count('(-)') > 0: self._typeLineRead = 'desconto' elif fieldOne.count('MORA/MULTA') > 0 and fieldOne.count( '(+)') > 0: self._typeLineRead = 'juros' if data.count('VALOR DO PAGAMENTO') > 0 and data.count('R$') > 0: self._typeLineRead = 'valor_pago' elif data.count('DATA DE PAGAMENTO') > 0: self._typeLineRead = 'data_pagamento' # dados da linha do BENEFICIARIO if self._typeLineRead == 'beneficiario' and fieldOne.count( 'BENEFICIARIO') == 0: # alguns comprovantes de boleto tem a RAZAO SOCIAL e CNPJ também if (fieldOne == "RAZAO SOCIAL"): nameProvider = ' '.join( dataSplitSpace[2:len(dataSplitSpace) - 2]) cgceProvider = funcoesUteis.treatNumberField( dataSplitSpace[len(dataSplitSpace) - 2]) else: nameProvider = ' '.join( dataSplitSpace[:len(dataSplitSpace) - 1]) nameProvider = nameProvider.strip() dueDate = funcoesUteis.retornaCampoComoData( dataSplitSpace[len(dataSplitSpace) - 1]) # dados da linha do VALOR ORIGINAL DO BOLETO elif self._typeLineRead == 'valor_boleto' and fieldOne.count( 'VALOR DO BOLETO') == 0 and fieldOne.count( 'VALOR DO DOCUMENTO') == 0: amountOriginal = funcoesUteis.treatDecimalField( dataSplitSpace[len(dataSplitSpace) - 1]) # dados da linha do VALOR DESCONTO elif self._typeLineRead == 'desconto' and fieldOne.count( 'DESCONTO') == 0: amountDiscount = funcoesUteis.treatDecimalField( dataSplitSpace[len(dataSplitSpace) - 1]) # dados da linha do VALOR MORA/MULTA elif self._typeLineRead == 'juros' and fieldOne.count( 'MORA/MULTA') == 0: amountInterest = funcoesUteis.treatDecimalField( dataSplitSpace[len(dataSplitSpace) - 1]) # dados da linha do VALOR MORA/MULTA elif self._typeLineRead == 'valor_pago' and data.count( 'VALOR DO PAGAMENTO') == 0 and data.count('R$') == 0: amountPaid = funcoesUteis.treatDecimalField( dataSplitSpace[len(dataSplitSpace) - 1]) for valueOfLineDatePayment in self._valuesOfLineDatePayment: if data[0:len(valueOfLineDatePayment )] == valueOfLineDatePayment: paymentDate = funcoesUteis.treatTextField( data[len(valueOfLineDatePayment) + 1:len(valueOfLineDatePayment) + 11]) if paymentDate.find('.') >= 0: paymentDate = funcoesUteis.retornaCampoComoData( paymentDate.replace('.', '/')) else: paymentDate = funcoesUteis.retornaCampoComoData( paymentDate) if paymentDate is not None and amountPaid > 0 and isProofPagamentoBoleto is True: valuesOfLine = { "paymentDate": paymentDate, "nameProvider": nameProvider, "cgceProvider": cgceProvider, "dueDate": dueDate, "bank": 'ITAU', "account": account, "amountPaid": round(amountPaid, 2), "amountInterest": round(amountInterest, 2), "amountDiscount": round(amountDiscount, 2), "amountOriginal": round(amountOriginal, 2), "historic": historic, "category": 'PAGTO DE BOLETO', "cgcePaying": cgcePaying, "foundProof": True, "amountPaidPerLote": round(amountPaid, 2), "wayFile": self._file } return valuesOfLine.copy()
def process(self): valuesOfLine = {} isDarf = False nameProvider = "" historic = "" amountPaid = float(0) account = "" amountOriginal = float(0) amountDiscount = float(0) amountInterest = float(0) amountFine = float(0) paymentDate = None for data in self._dataFile: if isDarf == False and data.find('PAGAMENTO') >= 0 and ( data.find('DARF') >= 0 or data.find('SIMPLES NACIONAL') >= 0): isDarf = True data = str(data) dataSplit = data.split(':') fieldOne = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 1)) fieldTwo = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 2)) if fieldOne.count('CONTA DEBITADA') > 0: self._accountDebitOrCredit = 'DEBIT' elif fieldOne.count('AGENTE ARRECADADOR') > 0: self._accountDebitOrCredit = 'CREDIT' if self._accountDebitOrCredit == 'DEBIT': # if fieldOne.count('AGENCIA/CONTA') > 0: # account = fieldTwo.split() # account = funcoesUteis.analyzeIfFieldIsValidMatrix(account, 2) # account = str(funcoesUteis.treatNumberField(account)) if fieldOne.count('AGENCIA') > 0 and fieldOne.count( 'CONTA') > 0: account = fieldTwo.split('/') account = funcoesUteis.analyzeIfFieldIsValidMatrix( account, 2) account = str( funcoesUteis.treatNumberField(account, isInt=True)) elif self._accountDebitOrCredit == 'CREDIT': if fieldOne == "DATA DO PAGAMENTO": paymentDate = funcoesUteis.retornaCampoComoData(fieldTwo) if fieldOne == "VALOR PRINCIPAL": amountOriginal = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "DESCONTO": amountDiscount = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "VALOR DOS JUROS/ENCARGOS": amountInterest = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "VALOR DA MULTA": amountFine = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "VALOR TOTAL": amountPaid = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne.count('CPF OU CNPJ') > 0: nameProvider = f"DARF - {fieldTwo}" if nameProvider == "": nameProvider = "SIMPLES NACIONAL" if fieldOne.count('AGENCIA') > 0 and fieldOne.count('CONTA') > 0: if paymentDate is not None and amountPaid > 0 and isDarf is True: valuesOfLine = { "paymentDate": paymentDate, "nameProvider": nameProvider, "cgceProvider": "", "dueDate": None, "bank": 'ITAU', "account": account, "amountPaid": round(amountPaid, 2), "amountInterest": round(amountInterest, 2), "amountDiscount": round(amountDiscount, 2), "amountFine": round(amountFine, 2), "amountOriginal": round(amountOriginal, 2), "historic": historic, "category": 'DARF' if nameProvider != "SIMPLES NACIONAL" else nameProvider, "cgcePaying": "", "foundProof": True, "amountPaidPerLote": round(amountPaid, 2), "wayFile": self._file } return valuesOfLine.copy()
def process(self): valuesOfFile = [] valuesOfLine = {} isPagamento = False nameProvider = "" historic = "" amountPaid = float(0) account = "" amountOriginal = float(0) amountDiscount = float(0) amountInterest = float(0) amountFine = float(0) paymentDate = None dueDate = None countQtdDataNecessaryToProofIsValid = 0 for data in self._dataFile: # print(data) if data.find('SICOOB - SISTEMA DE COOPERATIVAS') >= 0: countQtdDataNecessaryToProofIsValid = 0 countQtdDataNecessaryToProofIsValid += 1 if data.find('PAGAMENTO DE TITULO') >= 0: countQtdDataNecessaryToProofIsValid += 1 if countQtdDataNecessaryToProofIsValid >= 2: isPagamento = True data = str(data) dataSplit = data.split(':') fieldOne = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 1)) fieldTwo = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 2)) # fieldThree = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 3)) if fieldOne == 'CONTA': account = funcoesUteis.treatNumberField(fieldTwo.split('/')[0]) if fieldOne.count('NOME') > 0 and fieldOne.count( "BENEFICIARIO") > 0: nameProvider = fieldTwo if fieldOne.count('CNPJ') > 0 and fieldOne.count( "BENEFICIARIO") > 0: cgceProvider = fieldTwo if fieldOne.count('CNPJ') > 0 and fieldOne.count("PAGADOR") > 0: cgcePaying = fieldTwo if fieldOne == "DATA PAGAMENTO": paymentDate = funcoesUteis.retornaCampoComoData(fieldTwo) if fieldOne == "DATA VENCIMENTO": dueDate = funcoesUteis.retornaCampoComoData(fieldTwo) if fieldOne == "VALOR DOCUMENTO": amountOriginal = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne.count('DESCONTO') > 0 and fieldOne.count( "ABATIMENTO") > 0: amountDiscount = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne.count('OUTROS ACRESCIMOS') > 0: amountInterest = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "VALOR PAGO": amountPaid = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "VALOR PAGO": if paymentDate is not None and amountPaid > 0 and isPagamento is True: valuesOfLine = { "paymentDate": paymentDate, "nameProvider": nameProvider, "cgceProvider": cgceProvider, "dueDate": dueDate, "bank": 'SICOOB', "account": account, "amountPaid": round(amountPaid, 2), "amountInterest": round(amountInterest, 2), "amountDiscount": round(amountDiscount, 2), "amountFine": round(amountFine, 2), "amountOriginal": round(amountOriginal, 2), "historic": historic, "category": '', "cgcePaying": cgcePaying, "foundProof": True, "amountPaidPerLote": round(amountPaid, 2), "wayFile": self._file } valuesOfFile.append(valuesOfLine.copy()) return valuesOfFile
def process(self): valuesOfLine = {} isFgts = False nameProvider = "" historic = "" amountPaid = float(0) account = "" amountOriginal = float(0) amountDiscount = float(0) amountInterest = float(0) amountFine = float(0) paymentDate = None for data in self._dataFile: if isFgts == False and data.find( 'RECOLHIMENTO') >= 0 and data.find('FGTS') >= 0: isFgts = True data = str(data) dataSplit = data.split(':') fieldOne = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 1)) fieldTwo = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 2)) if fieldOne.count('AGENCIA') > 0 and fieldOne.count('CONTA') > 0: account = fieldTwo.split('/') account = funcoesUteis.analyzeIfFieldIsValidMatrix(account, 2) account = str(funcoesUteis.treatNumberField(account)) if fieldOne == "PAGAMENTO EFETUADO EM": paymentDate = funcoesUteis.retornaCampoComoData(fieldTwo) if fieldOne == "VALOR RECOLHIDO": amountPaid = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne.count('DESCRICAO DO PAGAMENTO') > 0: nameProvider = f"RECOLHIMENTO FGTS - {fieldTwo}" if paymentDate is not None and amountPaid > 0 and isFgts is True: valuesOfLine = { "paymentDate": paymentDate, "nameProvider": nameProvider, "cgceProvider": "", "dueDate": None, "bank": 'ITAU', "account": account, "amountPaid": round(amountPaid, 2), "amountInterest": round(amountInterest, 2), "amountDiscount": round(amountDiscount, 2), "amountFine": round(amountFine, 2), "amountOriginal": round(amountOriginal, 2), "historic": historic, "category": 'FGTS - RECOLHEIMENTO', "cgcePaying": "", "foundProof": True, "amountPaidPerLote": round(amountPaid, 2), "wayFile": self._file } return valuesOfLine.copy()
def process(self): valuesOfLine = {} isPagamentoInss = False nameProvider = "" historic = "" amountPaid = float(0) account = "" amountOriginal = float(0) amountDiscount = float(0) amountInterest = float(0) amountFine = float(0) paymentDate = None dueDate = None for data in self._dataFile: if isPagamentoInss == False and data.find( 'COMPROVANTE DE PAGAMENTO') >= 0 and (data.find('INSS') or data.find('DARF')): isPagamentoInss = True data = str(data) dataSplit = data.split(':') fieldOne = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 1)) fieldTwo = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 2)) fieldThree = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 3)) if fieldOne.count('DO DOCUMENTO') > 0 and fieldTwo.count( "DATA") > 0: paymentDate = funcoesUteis.retornaCampoComoData(fieldThree) if fieldOne == 'CONTA': account = str( funcoesUteis.treatNumberField(fieldTwo, isInt=True)) if fieldOne.count('MULTA') > 0 or fieldOne.count('JUROS') > 0: amountInterest = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "VALOR TOTAL": amountPaid = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == 'DESCRICAO': nameProvider = fieldTwo if fieldOne == "DESCRICAO": if paymentDate is not None and amountPaid > 0 and isPagamentoInss is True: valuesOfLine = { "paymentDate": paymentDate, "nameProvider": nameProvider, "cgceProvider": "", "dueDate": dueDate, "bank": 'AMAZONIA', "account": account, "amountPaid": round(amountPaid, 2), "amountInterest": round(amountInterest, 2), "amountDiscount": round(amountDiscount, 2), "amountFine": round(amountFine, 2), "amountOriginal": round(amountOriginal, 2), "historic": historic, "category": 'PAGAMENTO', "cgcePaying": "", "foundProof": True, "amountPaidPerLote": round(amountPaid, 2), "wayFile": self._file } return valuesOfLine.copy()
def process(self): valuesOfLine = {} isPagamento = False nameProvider = "" historic = "" amountPaid = float(0) account = "" amountOriginal = float(0) amountDiscount = float(0) amountInterest = float(0) amountFine = float(0) paymentDate = None dueDate = None for data in self._dataFile: if isPagamento == False and data.find( 'COMPROVANTE DE PAGAMENTO') >= 0: isPagamento = True data = str(data) dataSplit = data.split(':') fieldOne = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 1)) fieldTwo = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 2)) fieldThree = funcoesUteis.treatTextField( funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 3)) if fieldOne.count('DO DOCUMENTO') > 0 and fieldTwo.count( "DATA") > 0: paymentDate = funcoesUteis.retornaCampoComoData(fieldThree) if fieldOne == 'CONTA': account = str( funcoesUteis.treatNumberField(fieldTwo, isInt=True)) if fieldOne.count('BENEFICIARIO') > 0: self._accountDebitOrCredit = 'DEBIT' elif fieldOne.count('PAGADOR') > 0: self._accountDebitOrCredit = 'CREDIT' elif fieldOne.count('SACADOR') > 0: self._accountDebitOrCredit = '' if self._accountDebitOrCredit == 'DEBIT': if fieldOne == 'RAZAO SOCIAL': nameProvider = fieldTwo if fieldOne == 'CNPJ/CPF': cgceProvider = fieldTwo elif self._accountDebitOrCredit == 'CREDIT': if fieldOne == "DATA DO PAGAMENTO": paymentDate = funcoesUteis.retornaCampoComoData(fieldTwo) if fieldOne == "DATA DE VENCIMENTO": dueDate = funcoesUteis.retornaCampoComoData(fieldTwo) if fieldOne == "VALOR NOMINAL": amountOriginal = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == 'ENCARGOS': amountInterest = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "VALOR PAGO": amountPaid = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "DESCONTO": amountDiscount = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "VALOR PAGO": if paymentDate is not None and amountPaid > 0 and isPagamento is True: valuesOfLine = { "paymentDate": paymentDate, "nameProvider": nameProvider, "cgceProvider": cgceProvider, "dueDate": dueDate, "bank": 'AMAZONIA', "account": account, "amountPaid": round(amountPaid, 2), "amountInterest": round(amountInterest, 2), "amountDiscount": round(amountDiscount, 2), "amountFine": round(amountFine, 2), "amountOriginal": round(amountOriginal, 2), "historic": historic, "category": 'PAGAMENTO', "cgcePaying": "", "foundProof": True, "amountPaidPerLote": round(amountPaid, 2), "wayFile": self._file } return valuesOfLine.copy()
def process(self): valuesOfLine = {} isDarf = False nameProvider = "" historic = "" amountPaid = float(0) account = "" amountOriginal = float(0) amountDiscount = float(0) amountInterest = float(0) amountFine = float(0) paymentDate = None for data in self._dataFile: if isDarf == False and data.find('PAGAMENTO DE GPS') >= 0: isDarf = True data = str(data) dataSplit = data.split(':') fieldOne = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 1)) fieldTwo = funcoesUteis.treatTextField(funcoesUteis.analyzeIfFieldIsValidMatrix(dataSplit, 2)) if fieldOne.count('CONTA DEBITADA') > 0: self._accountDebitOrCredit = 'DEBIT' elif fieldOne.count('AGENTE ARRECADADOR') > 0: self._accountDebitOrCredit = 'CREDIT' if self._accountDebitOrCredit == 'DEBIT': if fieldOne.count('AGENCIA') > 0 and fieldOne.count('CONTA') > 0: account = fieldTwo.split('/') account = funcoesUteis.analyzeIfFieldIsValidMatrix(account, 2) account = str(funcoesUteis.treatNumberField(account, isInt=True)) elif self._accountDebitOrCredit == 'CREDIT': if fieldOne == "DATA DO PAGAMENTO": paymentDate = funcoesUteis.retornaCampoComoData(fieldTwo) if fieldOne.count("MON/JUR/MUL") > 0: amountInterest = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "VALOR TOTAL": amountPaid = funcoesUteis.treatDecimalField(fieldTwo) if fieldOne == "CODIGO DE PAGAMENTO": nameProvider = f"GPS - {fieldTwo}" if fieldOne.count('IDENTIFICADOR') > 0: cgceProvider = fieldTwo if fieldOne == "AGENCIA" or ( fieldOne.count('AGENCIA') > 0 and fieldOne.count('CONTA') > 0 ): if paymentDate is not None and amountPaid > 0 and isDarf is True: valuesOfLine = { "paymentDate": paymentDate, "nameProvider": nameProvider, "cgceProvider": cgceProvider, "dueDate": None, "bank": 'ITAU', "account": account, "amountPaid": round(amountPaid, 2), "amountInterest": round(amountInterest, 2), "amountDiscount": round(amountDiscount, 2), "amountFine": round(amountFine, 2), "amountOriginal": round(amountOriginal, 2), "historic": historic, "category": 'DARF', "cgcePaying": "", "foundProof": True, "amountPaidPerLote": round(amountPaid, 2), "wayFile": self._file } return valuesOfLine.copy()