def new_instance_based_on(dispositivo_base, tipo_base, base_alteracao=None):
        dp = Dispositivo()

        dp.tipo_dispositivo = tipo_base

        dp.set_numero_completo(
            dispositivo_base.get_numero_completo())
        dp.nivel = dispositivo_base.nivel
        dp.texto = ''
        dp.visibilidade = True
        # dp.auto_inserido = dispositivo_base.auto_inserido
        dp.ta = dispositivo_base.ta
        dp.dispositivo_pai = dispositivo_base.dispositivo_pai
        dp.publicacao = dispositivo_base.publicacao

        b = base_alteracao if base_alteracao else dispositivo_base

        # teste de criação inversa de itens alterados por mesmo bloco
        dp.ta_publicado = b.ta_publicado
        dp.dispositivo_atualizador = b.dispositivo_atualizador

        if dp.ta_publicado:
            dp.ordem_bloco_atualizador = b.ordem_bloco_atualizador + \
                Dispositivo.INTERVALO_ORDEM

        dp.dispositivo_vigencia = dispositivo_base.dispositivo_vigencia
        if dp.dispositivo_vigencia:
            dp.inicio_eficacia = dp.dispositivo_vigencia.inicio_eficacia
            dp.inicio_vigencia = dp.dispositivo_vigencia.inicio_vigencia
            dp.fim_eficacia = dp.dispositivo_vigencia.fim_eficacia
            dp.fim_vigencia = dp.dispositivo_vigencia.fim_vigencia
        else:
            dp.inicio_eficacia = dispositivo_base.inicio_eficacia
            dp.inicio_vigencia = dispositivo_base.inicio_vigencia
            dp.fim_eficacia = dispositivo_base.fim_eficacia
            dp.fim_vigencia = dispositivo_base.fim_vigencia

        dp.ordem = dispositivo_base.ordem

        return dp