Laser/ERM integration is a collection of features aimed at allowing a LASER site to synchronize their subscriptions (Content Lists) and licenses with the FOLIO ERM Agreements and Licenses apps. The integration works via a new backed module : mod-remote-sync (https://github.com/folio-org/mod-remote-sync) and related UI: ui-remote-sync (https://github.com/folio-org/ui-remote-sync). Taken together, remote-sync is general purpose scriptable ETL tool for FOLIO into which arbitrary configurations can be loaded and used to keep FOLIO in sync with a remote data source. Whilst remote-sync itself is intended to be general and reusable, the configuration for LASER is solution specific and can be found here (https://raw.githubusercontent.com/k-int/folio-sync-tools/main/laser/laser_registry.json).
...
On the left side, the record source is listed. Boxes in this column represent the actual raw records which will be / have been collected from a remote source. Remote sync runs on a cron schedule which is invoked every 60 minutes. If a previous extract job has not yet completed, the task is skipped. This means remote-sync will try to synchronize with a remote source once per hour. Because some sources (LASER) do not provide a good cursor mechanism the only way to tell if a record has changed is to download the content and compare the current version with the previous one. That is exactly the process which takes place in this box for LASER. The main aim of the first column is to take a datasource with heterogeneous cursor semantics and turn it into a record stream which can be enumerated. The boxes on the left hand side correspond to the "source" record types in the registry.
...
- If the sync titles setting is yes
- Generate the FOLIO Package import JSON for the subscription
- upsert (Insert or update) the package definition and remember the package details (UUID)
- upsert (Insert or update) the subscription
upsertPackage procedure
We defer entirely to the agreements package ingest routine here - there is no special processing in remote-sync. Agreements uses package reference to decide if it should import or update a package so we hand the whole bundle off to the /erm/packages/import endpoint
upsertSubscription procedure
- check to see if we have seen this incoming sub before.
- If we have - attempt the agreementUpdate procedure
- otherwise - see if we have feedback about creating, ignoring or mapping this subscription
- create - create a new agreement and store the ID so we can map it in the future
- ignore - do nothing
- map - retrieve the mapped ID from the user feedback and apply the agreementUpdate procedure
agreementCreate procedure
agreementUpdate procedure
we should set up a (semi-technical) documentation document in google, where you can explain the different workflows in that data is processed in the app. Things like the queue (that I learned about only today ), things like "when does something fail", things like "when do we need to retrigger after a change to a mapping" and so on. You will have it somewhere, surely.
And then, I think, we should get to the point to say that "this is it", every other expected behaviuor will be future features for a future development phase. And only real bugs, where the app doesn't behave as the document describes, will be things to work on in this project.