def METHOD_NAME(valid_chargepoints: List[Chargepoint]) -> List:
    """ermittelt die Ladepunkte in der Reihenfolge, in der sie geladen/gestoppt werden sollen. Die Bedingungen
    sind:
    geringste Mindeststromstärke, niedrigster SoC, frühester Ansteck-Zeitpunkt(Einschalten)/Lademenge(Abschalten),
    niedrigste Ladepunktnummer.
    """
    preferenced_chargepoints = []
    chargepoints = dict.fromkeys(valid_chargepoints)
    try:
        # Bedingungen in der Reihenfolge, in der sie geprüft werden.
        condition_types = ("min_current", "soc", "imported_since_plugged", "plug_in", "num")
        # Bedingung, die geprüft wird (entspricht Index von condition_types)
        condition = 0
        if chargepoints:
            while len(chargepoints) > 0:
                # entsprechend der Bedingung die Values im Dictionary füllen
                if condition_types[condition] == "min_current":
                    chargepoints.update(
                        (cp, cp.data.set.charging_ev_data.data.control_parameter.required_current)
                        for cp in chargepoints.keys())
                elif condition_types[condition] == "soc":
                    chargepoints.update(
                        (cp, cp.data.set.charging_ev_data.data.get.soc) for cp in chargepoints.keys())
                elif condition_types[condition] == "plug_in":
                    chargepoints.update((cp, convert_to_unix_timestamp(cp.data.set.plug_time))
                                        for cp in chargepoints.keys())
                elif condition_types[condition] == "imported_since_plugged":
                    chargepoints.update((cp, cp.data.set.log.imported_since_plugged) for cp in chargepoints.keys())
                else:
                    chargepoints.update((cp, cp.num) for cp in chargepoints.keys())
                # kleinsten Value im Dictionary ermitteln
                extreme_value = min(chargepoints.values())
                # dazugehörige Keys ermitteln
                extreme_cp = [
                    key for key in chargepoints if chargepoints[key] == extreme_value]
                if len(extreme_cp) > 1:
                    # Wenn es mehrere LP gibt, die den gleichen Minimalwert haben, nächste Bedingung prüfen.
                    condition += 1
                else:
                    preferenced_chargepoints.append(extreme_cp[0])
                    chargepoints.pop(extreme_cp[0])
        if preferenced_chargepoints:
            log.debug(f"Geordnete Ladepunkte {[cp.num for cp in preferenced_chargepoints]}")
        return preferenced_chargepoints
    except Exception:
        log.exception("Fehler im Algorithmus-Modul")
        return preferenced_chargepoints