def create_{{ entity_name.lower() }}Service(repository, **kwargs):
    """
    Crea una nueva instancia de {{ entity_name.lower() }}.

    :param repository: Repositorio que maneja la persistencia de {{ entity_name.lower() }}.
    :param kwargs: Diccionario con los datos necesarios para crear la instancia.
        nota: puedes sustituir **kwargs por un DTO    
    :return: La entidad creada.
    :raises ValueError: Si las reglas de negocio no se cumplen.
    """
    # Validación de reglas de negocio
    if repository.exists_by_field("unique_field", kwargs.get("unique_field")):
        raise ValueError("An instance with this unique_field already exists.")

    # Creación en el repositorio
    entity = repository.create(**kwargs)
    return entity


def retrieve_{{ entity_name.lower() }}Service(repository, entity_id):
    """
    Recupera una instancia de {{ entity_name.lower() }} por su ID.

    :param repository: Repositorio que maneja la persistencia de {{ entity_name.lower() }}.
    :param entity_id: ID de la instancia a recuperar.
    :return: La entidad recuperada.
    :raises ValueError: Si no se encuentra la instancia.
    """
    entity = repository.get_by_id(entity_id)
    if not entity:
        raise ValueError(f"No {{ entity_name.lower() }} found with ID {entity_id}.")
    return entity


def update_{{ entity_name.lower() }}Service(repository, entity_id, **kwargs):
    """
    Actualiza una instancia existente de {{ entity_name.lower() }}.

    :param repository: Repositorio que maneja la persistencia de {{ entity_name.lower() }}.
    :param entity_id: ID de la instancia a actualizar.
    :param kwargs: Diccionario con los datos a actualizar.
        nota: puedes sustituir **kwargs por un DTO    
    :return: La entidad actualizada.
    :raises ValueError: Si no se encuentra la instancia o las reglas de negocio no se cumplen.
    """
    # Recuperar la entidad
    entity = repository.get_by_id(entity_id)
    if not entity:
        raise ValueError(f"No {{ entity_name.lower() }} found with ID {entity_id}.")

    # Actualización en el repositorio
    updated_entity = repository.update(entity_id, **kwargs)
    return updated_entity


def delete_{{ entity_name.lower() }}Service(repository, entity_id):
    """
    Elimina una instancia de {{ entity_name.lower() }}.

    :param repository: Repositorio que maneja la persistencia de {{ entity_name.lower() }}.
    :param entity_id: ID de la instancia a eliminar.
    :return: Ninguno.
    :raises ValueError: Si no se encuentra la instancia.
    """
    # Recuperar la entidad
    entity = repository.get_by_id(entity_id)
    if not entity:
        raise ValueError(f"No {{ entity_name.lower() }} found with ID {entity_id}.")

    # Eliminación en el repositorio
    repository.delete(entity_id)
