def gerar(usuario,
          acoes,
          periodo,
          conta_associacao,
          observacao_conciliacao,
          previa=False):
    try:
        LOGGER.info("GERANDO DEMONSTRATIVO...")
        rateios_conferidos = RateioDespesa.rateios_da_conta_associacao_no_periodo(
            conta_associacao=conta_associacao, periodo=periodo,
            conferido=True).order_by('despesa__data_transacao')

        rateios_nao_conferidos = RateioDespesa.rateios_da_conta_associacao_no_periodo(
            conta_associacao=conta_associacao,
            periodo=periodo,
            conferido=False).order_by('despesa__data_transacao')

        rateios_nao_conferidos_em_periodos_anteriores = RateioDespesa.rateios_da_conta_associacao_em_periodos_anteriores(
            conta_associacao=conta_associacao,
            periodo=periodo,
            conferido=False).order_by('despesa__data_transacao')

        receitas_demonstradas = Receita.receitas_da_conta_associacao_no_periodo(
            conta_associacao=conta_associacao, periodo=periodo, conferido=True)

        path = os.path.join(os.path.basename(staticfiles_storage.location),
                            'cargas')
        nome_arquivo = os.path.join(
            path, 'modelo_demonstrativo_financeiro_novo_v3.xlsx')
        workbook = load_workbook(nome_arquivo)
        worksheet = workbook.active

        cabecalho(worksheet, periodo, conta_associacao, previa)

        bloco1_identificacao_apm(worksheet, acoes)
        bloco2_identificacao_conta(worksheet, conta_associacao,
                                   observacao_conciliacao)
        bloco3_resumo_por_acao(worksheet, acoes, conta_associacao, periodo)
        bloco4_creditos_demonstrados(worksheet, receitas_demonstradas)
        bloco5_despesas_demonstradas(worksheet, rateios_conferidos)
        bloco6_despesas_demonstradas(worksheet, rateios_nao_conferidos)
        bloco7_despesas_demonstradas(
            worksheet, rateios_nao_conferidos_em_periodos_anteriores)

        data_geracao_documento(worksheet, usuario, previa)

    finally:
        LOGGER.info("DEMONSTRATIVO GERADO")

    return workbook
Пример #2
0
    def relacao_bens_info(self, request):
        conta_associacao_uuid = self.request.query_params.get(
            'conta-associacao')
        periodo_uuid = self.request.query_params.get('periodo')
        periodo = Periodo.by_uuid(periodo_uuid)
        conta_associacao = ContaAssociacao.by_uuid(conta_associacao_uuid)
        prestacao_conta = PrestacaoConta.objects.filter(
            associacao=conta_associacao.associacao,
            periodo__uuid=periodo_uuid).first()
        relacao_bens = RelacaoBens.objects.filter(
            conta_associacao__uuid=conta_associacao_uuid,
            prestacao_conta=prestacao_conta).first()

        msg = ""
        if not relacao_bens:
            rateios = RateioDespesa.rateios_da_conta_associacao_no_periodo(
                conta_associacao=conta_associacao,
                periodo=periodo,
                aplicacao_recurso=APLICACAO_CAPITAL)
            if rateios:
                msg = 'Documento pendente de geração'
            else:
                msg = "Não houve bem adquirido ou produzido no referido período."
        else:
            msg = str(relacao_bens)

        return Response(msg)
Пример #3
0
def gerar_dados_demonstrativo_financeiro(usuario, acoes, periodo, conta_associacao, prestacao, observacao_conciliacao, previa=False):
    try:
        LOGGER.info("GERANDO DADOS DEMONSTRATIVO...")
        rateios_conferidos = RateioDespesa.rateios_da_conta_associacao_no_periodo(
            conta_associacao=conta_associacao, periodo=periodo, conferido=True).order_by('despesa__data_transacao')

        rateios_nao_conferidos = RateioDespesa.rateios_da_conta_associacao_no_periodo(conta_associacao=conta_associacao, periodo=periodo, conferido=False).order_by('despesa__data_transacao')

        rateios_nao_conferidos_periodos_anteriores = RateioDespesa.rateios_da_conta_associacao_em_periodos_anteriores(
            conta_associacao=conta_associacao, periodo=periodo, conferido=False).order_by('despesa__data_transacao')

        receitas_demonstradas = Receita.receitas_da_conta_associacao_no_periodo(
            conta_associacao=conta_associacao, periodo=periodo, conferido=True)

        cabecalho = cria_cabecalho(periodo, conta_associacao, previa)
        identificacao_apm = cria_identificacao_apm(acoes)
        identificacao_conta = cria_identificacao_conta(conta_associacao, observacao_conciliacao)
        resumo_por_acao = cria_resumo_por_acao(acoes, conta_associacao, periodo)
        creditos_demonstrados = cria_creditos_demonstrados(receitas_demonstradas)
        despesas_demonstradas = cria_despesas(rateios_conferidos)
        despesas_nao_demonstradas = cria_despesas(rateios_nao_conferidos)
        despesas_anteriores_nao_demonstradas = cria_despesas(rateios_nao_conferidos_periodos_anteriores)
        observacoes = cria_observacoes(periodo, conta_associacao)
        data_geracao_documento = cria_data_geracao_documento(usuario, previa)
        data_geracao = cria_data_geracao()

        dados_demonstrativo = {
            "cabecalho": cabecalho,
            "identificacao_apm": identificacao_apm,
            "identificacao_conta": identificacao_conta,
            "resumo_por_acao": resumo_por_acao,
            "creditos_demonstrados": creditos_demonstrados,
            "despesas_demonstradas": despesas_demonstradas,
            "despesas_nao_demonstradas": despesas_nao_demonstradas,
            "despesas_anteriores_nao_demonstradas": despesas_anteriores_nao_demonstradas,
            "observacoes_acoes": observacoes,
            "data_geracao_documento": data_geracao_documento,
            "data_geracao": data_geracao
        }
    # except Exception as e:
    #    LOGGER.error("ERRO no DADOS DEMONSTRATIVO: %s", str(e))
    finally:
        LOGGER.info("DADOS DEMONSTRATIVO GERADO")

    return dados_demonstrativo
Пример #4
0
def gerar_arquivo_relacao_de_bens(periodo,
                                  conta_associacao,
                                  prestacao=None,
                                  previa=False,
                                  criar_arquivos=True):

    filename = 'relacao_bens.xlsx'

    rateios = RateioDespesa.rateios_da_conta_associacao_no_periodo(
        conta_associacao=conta_associacao,
        periodo=periodo,
        aplicacao_recurso=APLICACAO_CAPITAL)

    if rateios:
        relacao_bens, _ = RelacaoBens.objects.update_or_create(
            conta_associacao=conta_associacao,
            prestacao_conta=prestacao,
            periodo_previa=None if prestacao else periodo,
            versao=RelacaoBens.VERSAO_PREVIA
            if previa else RelacaoBens.VERSAO_FINAL,
            status=RelacaoBens.STATUS_EM_PROCESSAMENTO,
        )

        # PDF
        dados_relacao_de_bens = gerar_dados_relacao_de_bens(
            conta_associacao=conta_associacao,
            periodo=periodo,
            rateios=rateios)

        if criar_arquivos:
            gerar_arquivo_relacao_de_bens_pdf(
                dados_relacao_de_bens=dados_relacao_de_bens,
                relacao_bens=relacao_bens)

        if criar_arquivos:
            xlsx = gerar(periodo, conta_associacao, previa=previa)
            with NamedTemporaryFile() as tmp:
                xlsx.save(tmp.name)
                relacao_bens.arquivo.save(name=filename, content=File(tmp))

        relacao_bens.arquivo_concluido()

        return relacao_bens

    LOGGER.info(
        "Não houve bem adquirido ou produzido no referido período (%s).",
        str(periodo))
    return None
Пример #5
0
def gerar(periodo, conta_associacao, previa=False):

    LOGGER.info("GERANDO RELAÇÃO DE BENS...")
    rateios = RateioDespesa.rateios_da_conta_associacao_no_periodo(
        conta_associacao=conta_associacao,
        periodo=periodo,
        aplicacao_recurso=APLICACAO_CAPITAL)
    path = os.path.join(os.path.basename(staticfiles_storage.location),
                        'cargas')
    nome_arquivo = os.path.join(path, 'modelo_relacao_de_bens.xlsx')
    workbook = load_workbook(nome_arquivo)
    worksheet = workbook.active

    cabecalho(worksheet, periodo, conta_associacao)
    identificacao_apm(worksheet, conta_associacao)
    data_geracao_documento(worksheet, previa)
    pagamentos(worksheet, rateios)

    return workbook
Пример #6
0
def gerar_arquivo_relacao_de_bens(periodo, conta_associacao, prestacao):
    filename = 'relacao_bens.xlsx'

    rateios = RateioDespesa.rateios_da_conta_associacao_no_periodo(
        conta_associacao=conta_associacao,
        periodo=periodo,
        aplicacao_recurso=APLICACAO_CAPITAL)

    if rateios:
        xlsx = gerar(periodo, conta_associacao)
        with NamedTemporaryFile() as tmp:
            xlsx.save(tmp.name)

            relacao_bens, _ = RelacaoBens.objects.update_or_create(
                conta_associacao=conta_associacao, prestacao_conta=prestacao)
            relacao_bens.arquivo.save(name=filename, content=File(tmp))
        return

    LOGGER.info(
        "Não houve bem adquirido ou produzido no referido período (%s).",
        str(periodo))
def test_api_deve_conciliar_transacao_despesa(
        jwt_authenticated_client_a, acao_associacao_role_cultural,
        despesa_2020_1, rateio_despesa_2020_role_nao_conferido,
        rateio_despesa_2020_ptrf_conferido, periodo_2020_1,
        conta_associacao_cartao):

    url = f'/api/conciliacoes/conciliar-transacao/?periodo={periodo_2020_1.uuid}'
    url = f'{url}&conta_associacao={conta_associacao_cartao.uuid}'
    url = f'{url}&transacao={despesa_2020_1.uuid}'
    url = f'{url}&tipo=GASTO'

    response = jwt_authenticated_client_a.patch(
        url, content_type='application/json')

    despesa_conciliada = Despesa.by_uuid(despesa_2020_1.uuid)
    rateio_conciliado = RateioDespesa.by_uuid(
        rateio_despesa_2020_role_nao_conferido.uuid)

    assert response.status_code == status.HTTP_200_OK

    assert despesa_conciliada.conferido, "Despesa deveria ter sido marcada como conferida."
    assert rateio_conciliado.conferido, "Rateio deveria ter sido marcado como conferido."
    assert rateio_conciliado.periodo_conciliacao == periodo_2020_1, "Rateio deveria ter sido vinculada ao período."
def gerar(periodo, acao_associacao, conta_associacao, previa=False):
    try:
        LOGGER.info("GERANDO DEMONSTRATIVO...")
        rateios_conferidos = RateioDespesa.rateios_da_acao_associacao_no_periodo(
            acao_associacao=acao_associacao,
            conta_associacao=conta_associacao,
            periodo=periodo,
            conferido=True)

        rateios_nao_conferidos = RateioDespesa.rateios_da_acao_associacao_no_periodo(
            acao_associacao=acao_associacao,
            conta_associacao=conta_associacao,
            periodo=periodo,
            conferido=False)

        rateios_nao_conferidos_em_periodos_anteriores = RateioDespesa.rateios_da_acao_associacao_em_periodo_anteriores(
            acao_associacao=acao_associacao,
            periodo=periodo,
            conta_associacao=conta_associacao,
            conferido=False)

        receitas_demonstradas = Receita.receitas_da_acao_associacao_no_periodo(
            acao_associacao=acao_associacao,
            conta_associacao=conta_associacao,
            periodo=periodo,
            conferido=True)

        fechamento_periodo = FechamentoPeriodo.objects.filter(
            acao_associacao=acao_associacao,
            conta_associacao=conta_associacao,
            periodo__uuid=periodo.uuid).first()

        path = os.path.join(os.path.basename(staticfiles_storage.location),
                            'cargas')
        nome_arquivo = os.path.join(path,
                                    'modelo_demonstrativo_financeiro.xlsx')
        workbook = load_workbook(nome_arquivo)
        worksheet = workbook.active

        cabecalho(worksheet, periodo, acao_associacao, conta_associacao,
                  previa)
        identificacao_apm(worksheet, acao_associacao)
        observacoes(worksheet, acao_associacao, periodo, conta_associacao)
        data_geracao_documento(worksheet, previa)
        sintese_receita_despesa(worksheet, acao_associacao, conta_associacao,
                                periodo, fechamento_periodo)
        creditos_demonstrados(worksheet, receitas_demonstradas)
        acc = len(receitas_demonstradas) - 1 if len(
            receitas_demonstradas) > 1 else 0
        pagamentos(worksheet, rateios_conferidos, acc=acc, start_line=28)
        acc += len(rateios_conferidos) - 1 if len(
            rateios_conferidos) > 1 else 0
        pagamentos(worksheet, rateios_nao_conferidos, acc=acc, start_line=34)
        acc += len(rateios_nao_conferidos) - 1 if len(
            rateios_nao_conferidos) > 1 else 0
        pagamentos(worksheet,
                   rateios_nao_conferidos_em_periodos_anteriores,
                   acc=acc,
                   start_line=40)
    except Exception as e:
        LOGGER.info("ERRO no Demonstrativo: %s", str(e))

    LOGGER.info("DEMONSTRATIVO GERADO")
    return workbook
def sintese_capital(row_capital, linha, acao_associacao, conta_associacao,
                    periodo, fechamento_periodo):
    """
    retorna uma tupla de saldos relacionados aos capitais
    """
    saldo_reprogramado_anterior_capital = fechamento_periodo.fechamento_anterior.saldo_reprogramado_capital if fechamento_periodo and fechamento_periodo.fechamento_anterior else 0
    receitas_demonstradas_capital = Receita.receitas_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=True,
        categoria_receita=APLICACAO_CAPITAL).aggregate(valor=Sum('valor'))

    rateios_demonstrados_capital = RateioDespesa.rateios_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=True,
        aplicacao_recurso=APLICACAO_CAPITAL).aggregate(
            valor=Sum('valor_rateio'))

    rateios_nao_conferidos_capital = RateioDespesa.rateios_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=False,
        aplicacao_recurso=APLICACAO_CAPITAL).aggregate(
            valor=Sum('valor_rateio'))

    rateios_nao_conferidos_outros_periodos = RateioDespesa.rateios_da_acao_associacao_em_periodo_anteriores(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=False,
        aplicacao_recurso=APLICACAO_CAPITAL).aggregate(
            valor=Sum('valor_rateio'))

    valor_capital_receitas_demonstradas = receitas_demonstradas_capital[
        'valor'] or 0
    valor_capital_rateios_demonstrados = rateios_demonstrados_capital[
        'valor'] or 0
    valor_capital_rateios_nao_demonstrados = rateios_nao_conferidos_capital[
        'valor'] or 0
    valor_capital_rateios_nao_demonstrados_outros_periodos = rateios_nao_conferidos_outros_periodos[
        'valor'] or 0

    if saldo_reprogramado_anterior_capital or valor_capital_receitas_demonstradas or valor_capital_rateios_demonstrados or valor_capital_rateios_nao_demonstrados or valor_capital_rateios_nao_demonstrados_outros_periodos:
        row_capital[
            SALDO_ANTERIOR].value = f'K {formata_valor(saldo_reprogramado_anterior_capital)}'
        row_capital[
            CREDITO].value = f'K {formata_valor(valor_capital_receitas_demonstradas)}'
        row_capital[
            DESPESA_REALIZADA].value = f'K {formata_valor(valor_capital_rateios_demonstrados)}'
        row_capital[
            DESPESA_NAO_REALIZADA].value = f'K {formata_valor(valor_capital_rateios_nao_demonstrados)}'
        valor_saldo_reprogramado_proximo_periodo_capital = saldo_reprogramado_anterior_capital + \
            valor_capital_receitas_demonstradas - \
            valor_capital_rateios_demonstrados - \
            valor_capital_rateios_nao_demonstrados
        row_capital[
            SALDO_REPROGRAMADO_PROXIMO].value = f'K {formata_valor(valor_saldo_reprogramado_proximo_periodo_capital if valor_saldo_reprogramado_proximo_periodo_capital > 0 else 0)}'
        row_capital[
            DESPESA_NAO_DEMONSTRADA_OUTROS_PERIODOS].value = f'K {formata_valor(valor_capital_rateios_nao_demonstrados_outros_periodos)}'
        valor_saldo_bancario_capital = valor_saldo_reprogramado_proximo_periodo_capital + valor_capital_rateios_nao_demonstrados + valor_capital_rateios_nao_demonstrados_outros_periodos
        valor_saldo_bancario_capital = valor_saldo_bancario_capital if valor_saldo_bancario_capital > 0 else 0
        row_capital[
            SALDO_BANCARIO].value = f'K {formata_valor(valor_saldo_bancario_capital)}'
        linha += 1

        return valor_saldo_reprogramado_proximo_periodo_capital, valor_saldo_bancario_capital, linha

    return (0, 0, linha)
Пример #10
0
def sintese_capital(acao_associacao, conta_associacao, periodo, fechamento_periodo, totalizador):
    fechamento_anterior = get_fechamento_anterior(conta_associacao=conta_associacao, acao_associacao=acao_associacao,
                                                  periodo=periodo, fechamento_periodo=fechamento_periodo)
    saldo_reprogramado_anterior_capital = fechamento_anterior.saldo_reprogramado_capital if fechamento_anterior else 0

    receitas_demonstradas_capital = Receita.receitas_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao, conta_associacao=conta_associacao, periodo=periodo, conferido=True,
        categoria_receita=APLICACAO_CAPITAL).aggregate(valor=Sum('valor'))

    receitas_nao_demonstradas_capital = Receita.receitas_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao, conta_associacao=conta_associacao, periodo=periodo, conferido=False,
        categoria_receita=APLICACAO_CAPITAL).aggregate(valor=Sum('valor'))

    rateios_demonstrados_capital = RateioDespesa.rateios_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao, conta_associacao=conta_associacao, periodo=periodo, conferido=True,
        aplicacao_recurso=APLICACAO_CAPITAL).aggregate(valor=Sum('valor_rateio'))

    rateios_nao_conferidos_capital = RateioDespesa.rateios_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao, conta_associacao=conta_associacao, periodo=periodo, conferido=False,
        aplicacao_recurso=APLICACAO_CAPITAL).aggregate(valor=Sum('valor_rateio'))

    rateios_nao_conferidos_outros_periodos = RateioDespesa.rateios_da_acao_associacao_em_periodo_anteriores(
        acao_associacao=acao_associacao, conta_associacao=conta_associacao, periodo=periodo, conferido=False,
        aplicacao_recurso=APLICACAO_CAPITAL).aggregate(valor=Sum('valor_rateio'))

    valor_capital_receitas_demonstradas = receitas_demonstradas_capital['valor'] or 0
    valor_capital_receitas_nao_demonstradas = receitas_nao_demonstradas_capital['valor'] or 0
    valor_capital_rateios_demonstrados = rateios_demonstrados_capital['valor'] or 0
    valor_capital_rateios_nao_demonstrados = rateios_nao_conferidos_capital['valor'] or 0
    valor_capital_rateios_nao_demonstrados_outros_periodos = rateios_nao_conferidos_outros_periodos['valor'] or 0

    saldo_anterior = ""
    credito = ""
    despesa_realizada = ""
    despesa_nao_realizada = ""
    despesa_nao_demostrada_outros_periodos = ""
    saldo_reprogramado_proximo = ""
    saldo_bancario = ""
    valor_saldo_reprogramado_proximo_periodo_capital = 0
    valor_saldo_bancario_capital = 0

    if saldo_reprogramado_anterior_capital or valor_capital_receitas_demonstradas or valor_capital_rateios_demonstrados or valor_capital_rateios_nao_demonstrados or valor_capital_rateios_nao_demonstrados_outros_periodos:
        saldo_anterior = saldo_reprogramado_anterior_capital
        credito = valor_capital_receitas_demonstradas
        despesa_realizada = valor_capital_rateios_demonstrados
        despesa_nao_realizada = valor_capital_rateios_nao_demonstrados
        valor_saldo_reprogramado_proximo_periodo_capital = (saldo_reprogramado_anterior_capital +
                                                            valor_capital_receitas_demonstradas -
                                                            valor_capital_rateios_demonstrados -
                                                            valor_capital_rateios_nao_demonstrados)

        saldo_reprogramado_proximo = (valor_saldo_reprogramado_proximo_periodo_capital
                                      if valor_saldo_reprogramado_proximo_periodo_capital > 0 else 0)

        despesa_nao_demostrada_outros_periodos = valor_capital_rateios_nao_demonstrados_outros_periodos
        valor_saldo_bancario_capital = (valor_saldo_reprogramado_proximo_periodo_capital +
                                        valor_capital_rateios_nao_demonstrados +
                                        valor_capital_rateios_nao_demonstrados_outros_periodos)

        valor_saldo_bancario_capital = valor_saldo_bancario_capital if valor_saldo_bancario_capital > 0 else 0

        saldo_bancario = valor_saldo_bancario_capital

    linha_capital = {
        "saldo_anterior": saldo_anterior,
        "credito": credito,
        "despesa_realizada": despesa_realizada,
        "despesa_nao_realizada": despesa_nao_realizada,
        "despesa_nao_demostrada_outros_periodos": despesa_nao_demostrada_outros_periodos,
        "saldo_reprogramado_proximo": saldo_reprogramado_proximo,
        "saldo_reprogramado_proximo_vr": valor_saldo_reprogramado_proximo_periodo_capital,
        "saldo_bancario": saldo_bancario,
        "valor_saldo_reprogramado_proximo_periodo_capital": valor_saldo_reprogramado_proximo_periodo_capital,
        "valor_saldo_bancario_capital": valor_saldo_bancario_capital,
        "credito_nao_demonstrado": valor_capital_receitas_nao_demonstradas,
    }

    totalizador['saldo_anterior']['K'] += saldo_reprogramado_anterior_capital
    totalizador['credito']['K'] += valor_capital_receitas_demonstradas
    totalizador['despesa_realizada']['K'] += valor_capital_rateios_demonstrados
    totalizador['despesa_nao_realizada']['K'] += valor_capital_rateios_nao_demonstrados
    totalizador['despesa_nao_demostrada_outros_periodos']['K'] += valor_capital_rateios_nao_demonstrados_outros_periodos
    totalizador['saldo_reprogramado_proximo']['K'] += (valor_saldo_reprogramado_proximo_periodo_capital
                                                       if valor_saldo_reprogramado_proximo_periodo_capital > 0 else 0)
    totalizador['valor_saldo_reprogramado_proximo_periodo']['K'] += valor_saldo_reprogramado_proximo_periodo_capital
    totalizador['valor_saldo_bancario']['K'] += valor_saldo_bancario_capital
    totalizador['credito_nao_demonstrado']['K'] += valor_capital_receitas_nao_demonstradas

    return linha_capital, totalizador
def sintese_custeio(row_custeio, linha, acao_associacao, conta_associacao,
                    periodo, fechamento_periodo, totalizador):
    """
    retorna uma tupla de saldos relacionados aos custeios
    """

    fechamento_anterior = get_fechamento_anterior(
        conta_associacao=conta_associacao,
        acao_associacao=acao_associacao,
        periodo=periodo,
        fechamento_periodo=fechamento_periodo)
    saldo_reprogramado_anterior_custeio = fechamento_anterior.saldo_reprogramado_custeio if fechamento_anterior else 0

    # Custeio
    receitas_demonstradas_custeio = Receita.receitas_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=True,
        categoria_receita=APLICACAO_CUSTEIO).aggregate(valor=Sum('valor'))

    receitas_nao_demonstradas_custeio = Receita.receitas_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=False,
        categoria_receita=APLICACAO_CUSTEIO).aggregate(valor=Sum('valor'))

    rateios_demonstrados_custeio = RateioDespesa.rateios_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=True,
        aplicacao_recurso=APLICACAO_CUSTEIO).aggregate(
            valor=Sum('valor_rateio'))

    rateios_nao_conferidos_custeio = RateioDespesa.rateios_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=False,
        aplicacao_recurso=APLICACAO_CUSTEIO).aggregate(
            valor=Sum('valor_rateio'))

    rateios_nao_conferidos_custeio_periodos_anteriores = RateioDespesa.rateios_da_acao_associacao_em_periodo_anteriores(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=False,
        aplicacao_recurso=APLICACAO_CUSTEIO).aggregate(
            valor=Sum('valor_rateio'))

    valor_custeio_receitas_demonstradas = receitas_demonstradas_custeio[
        'valor'] or 0
    valor_custeio_receitas_nao_demonstradas = receitas_nao_demonstradas_custeio[
        'valor'] or 0

    valor_custeio_rateios_demonstrados = rateios_demonstrados_custeio[
        'valor'] or 0
    valor_custeio_rateios_nao_demonstrados = rateios_nao_conferidos_custeio[
        'valor'] or 0
    valor_custeio_rateios_nao_demonstrados_periodos_anteriores = rateios_nao_conferidos_custeio_periodos_anteriores[
        'valor'] or 0

    if saldo_reprogramado_anterior_custeio or valor_custeio_receitas_demonstradas or valor_custeio_rateios_demonstrados or valor_custeio_rateios_nao_demonstrados or valor_custeio_rateios_nao_demonstrados_periodos_anteriores:

        valor_saldo_reprogramado_proximo_periodo_custeio = (
            saldo_reprogramado_anterior_custeio +
            valor_custeio_receitas_demonstradas -
            valor_custeio_rateios_demonstrados -
            valor_custeio_rateios_nao_demonstrados)

        valor_saldo_bancario_custeio = (
            valor_saldo_reprogramado_proximo_periodo_custeio +
            valor_custeio_rateios_nao_demonstrados +
            valor_custeio_rateios_nao_demonstrados_periodos_anteriores)

        valor_saldo_bancario_custeio = valor_saldo_bancario_custeio if valor_saldo_bancario_custeio > 0 else 0

        row_custeio[SALDO_ANTERIOR].value = formata_valor(
            saldo_reprogramado_anterior_custeio)
        row_custeio[CREDITO].value = formata_valor(
            valor_custeio_receitas_demonstradas)
        row_custeio[DESPESA_REALIZADA].value = formata_valor(
            valor_custeio_rateios_demonstrados)
        row_custeio[DESPESA_NAO_REALIZADA].value = formata_valor(
            valor_custeio_rateios_nao_demonstrados)
        row_custeio[CREDITO_NAO_DEMONSTRADO].value = formata_valor(
            valor_custeio_receitas_nao_demonstradas)

        row_custeio[SALDO_REPROGRAMADO_PROXIMO].value = formata_valor(
            valor_saldo_reprogramado_proximo_periodo_custeio
            if valor_saldo_reprogramado_proximo_periodo_custeio > 0 else 0)

        row_custeio[
            DESPESA_NAO_DEMONSTRADA_OUTROS_PERIODOS].value = formata_valor(
                valor_custeio_rateios_nao_demonstrados_periodos_anteriores)

        row_custeio[SALDO_BANCARIO].value = formata_valor(
            valor_saldo_bancario_custeio)

        linha += 1

        totalizador[SALDO_ANTERIOR]['C'] += saldo_reprogramado_anterior_custeio
        totalizador[CREDITO]['C'] += valor_custeio_receitas_demonstradas
        totalizador[DESPESA_REALIZADA][
            'C'] += valor_custeio_rateios_demonstrados
        totalizador[DESPESA_NAO_REALIZADA][
            'C'] += valor_custeio_rateios_nao_demonstrados
        totalizador[SALDO_REPROGRAMADO_PROXIMO][
            'C'] += valor_saldo_reprogramado_proximo_periodo_custeio if valor_saldo_reprogramado_proximo_periodo_custeio > 0 else 0
        totalizador[DESPESA_NAO_DEMONSTRADA_OUTROS_PERIODOS][
            'C'] += valor_custeio_rateios_nao_demonstrados_periodos_anteriores
        totalizador[SALDO_BANCARIO]['C'] += valor_saldo_bancario_custeio
        totalizador[CREDITO_NAO_DEMONSTRADO][
            'C'] += valor_custeio_receitas_nao_demonstradas

        return valor_saldo_reprogramado_proximo_periodo_custeio, valor_saldo_bancario_custeio, linha, totalizador

    else:
        row_custeio[SALDO_ANTERIOR].value = formata_valor(0)
        row_custeio[CREDITO].value = formata_valor(0)
        row_custeio[DESPESA_REALIZADA].value = formata_valor(0)
        row_custeio[DESPESA_NAO_REALIZADA].value = formata_valor(0)

        row_custeio[SALDO_REPROGRAMADO_PROXIMO].value = formata_valor(0)

        row_custeio[
            DESPESA_NAO_DEMONSTRADA_OUTROS_PERIODOS].value = formata_valor(0)

        row_custeio[SALDO_BANCARIO].value = formata_valor(0)

        row_custeio[CREDITO_NAO_DEMONSTRADO].value = formata_valor(
            valor_custeio_receitas_nao_demonstradas)
        totalizador[CREDITO_NAO_DEMONSTRADO][
            'C'] += valor_custeio_receitas_nao_demonstradas

    linha += 1

    return 0, 0, linha, totalizador