Buenas @Kurro Lopez.

Para una demo que tuve que hace utilicé un simple Ens.InboundAdapter en el que configuré una simple consulta SQL a la tabla que quería controlar:

Class Local.BS.GetAppointmentBS Extends Ens.BusinessService
{

Property Target As Ens.DataType.ConfigName;

Parameter SETTINGS = "Target:Basic";

Parameter ADAPTER = "Ens.InboundAdapter";

Method OnProcessInput(pRequest As %RegisteredObject, pResponse As %RegisteredObject) As %Status
{
    set tSC = $$$OK

    set selectAppointments = "SELECT PatientId, Facility, AppointmentId FROM Local_Object.Appointment WHERE AppointmentDate = ?"
    set statementAppointments = ##class(%SQL.Statement).%New()
    set statusAppointments = statementAppointments.%Prepare(selectAppointments)
    if ($$$ISOK(statusAppointments)) {
        set resultSetAppointments = statementAppointments.%Execute($H+1)
        if (resultSetAppointments.%SQLCODE = 0) {
            $$$TRACE($ZDT($H+1,4))
            while resultSetAppointments.%Next() {
                $$$TRACE("Consulta con resultados")
                set appointmentRequest = ##class(Local.Message.PatientInfoRequest).%New()
                set appointmentRequest.PatientId = resultSetAppointments.%GetData("PatientId")
                set appointmentRequest.Facility = resultSetAppointments.%GetData("Facility")
                set appointmentRequest.AppointmentId = resultSetAppointments.%GetData("AppointmentId")
                set tSC=..SendRequestAsync(..Target, appointmentRequest)            
            }
        }
    }

    Quit tSC
}

}

Le configuré un bonito intervalo de llamada:

Y con esto para mi demo fue suficiente.

Para tu caso necesitarías además controlar un campo que te permita identificar los registros nuevos o modificados (que es lo que hace en EnsLib.SQL.InboundAdapter por debajo), si tu tabla dispone de un campo de tipo fecha que refleje la última actualización/creación te bastará con almacenar en un global cuando fue la última vez que lanzaste una consulta para buscar todos los nuevos registros entre la ejecución actual y la anterior.

Si no dispones de un campo de última actualización puedes usar siempre la clave primaria en el caso de que sea un tipo numérico autoincremental, en ese caso sólo podrías controlar los nuevos registros insertados. La implementación sería igual al punto anterior, grabas el último identificador en un global y a la siguiente ejecución buscas todos los registros mayores al identificador del global.

Buenas @Kurro Lopez , parece que no es compatible el modelo que has descargado usando Ollama con lo que requiere la librería sentence transformers, te recomiendo que descargues el modelo directamente como se indica desde la página de hugginfaces:

https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2

from sentence_transformers import SentenceTransformer
sentences = ["This is an example sentence", "Each sentence is converted"]

model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
embeddings = model.encode(sentences)
print(embeddings)

Puedes descargarlo en local directamente así:

if not os.path.isdir('/app/data/model/'):
    model = sentence_transformers.SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')            
    model.save('/app/data/model/')

Una vez descargado podrás hacer referencia directamente al modelo descargado.

Buenas @Laura Blázquez García , no sería necesario aplicarle un índice al PosixTime, podrías tratarlo como una columna con un valor numérico al uso.

Al fin y al cabo un índice no es más que otra tabla donde se almacena el valor indexado y la referencia a los registros que contienen ese valor, si indexamos una columna de valores únicos nuestra tabla de índice será al final tan grande como nuestra tabla originaria, no obteniendo ninguna ventaja al respecto.

¡Hola César! He publicado tu comentario como pregunta ya que tendrá más visibilidad en la comunidad. Te contesto por aquí, lo que necesitas es habilitar para tu instalación de Apache el enrutamiento de todas las peticiones de ficheros que reciba, te copio aquí la URL de la documentación:

https://docs.intersystems.com/iris20231/csp/docbook/DocBook.UI.Page.cls?...

Entiendo que no debería haber ningún problema para invocar tantos BO como necesites, puedes verlo en nuestra documentación oficial: 

https://docs.intersystems.com/iris20243/csp/docbook/DocBook.UI.Page.cls?...

Yo particularmente no lo haría por no aumentar el acoplamiento del código, pero como ves en la documentación no hay problema por ello.

¡Hola @Yone Moreno!

Quizás te interese ver esta serie de artículos en la que mostramos como trabajar con mensajes FHIR como son los de tu ejemplo sin necesidad de contar con repositorio FHIR.

https://es.community.intersystems.com/post/usando-fhir-adapter-para-ofre...

Te ayudará a familiarizarte con el manejo de los mismos.