Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
synchronisation:introduction [2025/03/31 16:34] – [Store setup] Adrian Boone | synchronisation:introduction [2025/04/01 16:29] (current) – [Setting up or extending a sync system] Adrian Boone | ||
---|---|---|---|
Line 8: | Line 8: | ||
===== Synchronisation explained ===== | ===== Synchronisation explained ===== | ||
+ | |||
It's like this: | It's like this: | ||
Line 31: | Line 32: | ||
* For most installations, | * For most installations, | ||
* The **//Central server//**, and all of the remote sites are collectively referred to as **//sync sites//**. | * The **//Central server//**, and all of the remote sites are collectively referred to as **//sync sites//**. | ||
- | * Each sync site has a unique ID and connection parameters, along with a list of the other sync sites with which it can send/ | + | * Each sync site has a unique ID and connection parameters, along with a list of the other sync sites with which it can send/ |
=== Active vs Collector === | === Active vs Collector === | ||
Line 39: | Line 40: | ||
* Each store that is **// | * Each store that is **// | ||
* The **//Central server//** can optionally also have **// | * The **//Central server//** can optionally also have **// | ||
- | | ||
=== Sync and data integrity === | === Sync and data integrity === | ||
Line 61: | Line 61: | ||
Stores to be synced will exist as separate instances of the same store on more than one sync site: | Stores to be synced will exist as separate instances of the same store on more than one sync site: | ||
- | * on the central server - the store itself and its related preferences, | + | * on the central server - the store itself and its related preferences, |
* on the primary server - item visibility in the store is editable => all stores must exist on the primary server | * on the primary server - item visibility in the store is editable => all stores must exist on the primary server | ||
<WRAP center round important 95%> | <WRAP center round important 95%> | ||
- | On a mirrored sync system, the store must be created first on the central server. It will then sync to the primary server, where item visibility and/or master lists configured. | + | On a mirrored sync system, the store must be created first on the central server. It will then sync to the primary server, where item visibility and/or master lists can be configured. |
</ | </ | ||
- | * store data (e.g. store transactions, | + | * store data (e.g. store transactions, |
Once a store has been set up (see the relevant parameters below), item and name visibility for the store needs to be set up - see [[other_stuff: | Once a store has been set up (see the relevant parameters below), item and name visibility for the store needs to be set up - see [[other_stuff: | ||
* To do that, once you log in to the central/ | * To do that, once you log in to the central/ | ||
* To do that, you need to have permission to log in to it - see [[admin: | * To do that, you need to have permission to log in to it - see [[admin: | ||
- | |||
- | ==== Store sync types ==== | ||
- | |||
- | Each store in a synchronised system needs to have a sync " | ||
- | |||
- | === Active === | ||
- | |||
- | A store whose sync type is // | ||
- | |||
- | === Collector === | ||
- | |||
- | A store whose sync type is // | ||
- | |||
- | === Transfer === | ||
- | |||
- | A store whose sync type is // | ||
- | |||
- | |||
- | |||
- | ==== Store sync-with options ==== | ||
- | |||
- | <wrap info> | ||
- | |||
- | The Store ' | ||
- | |||
- | === None === | ||
- | |||
- | A value of // | ||
- | |||
- | === Active/ | ||
- | |||
- | A value of // | ||
- | |||
- | === Transfer === | ||
- | |||
- | A value of // | ||
- | |||
- | {{: | ||
- | |||
- | * In a standard (non-mirrored) setup, the sync server is //both// the primary server //and// the central server | ||
- | * In a mirrored setup, the sync server is //only// the central server - the primary server is one of the remote sites, except that: | ||
- | * it can also control central data | ||
- | * like the central server, //all// stores must exist | ||
- | ==== Store A ==== | ||
- | |||
- | An example of a store on the sync server which needs to also be reportable on another remote site. | ||
- | |||
- | **Store A** exists as an //Active store// on **sync server** and as a //Collector store// on **remote site 1**: | ||
- | |||
- | * On **sync server** store-specific data for this store can be entered. | ||
- | * On **remote site 1** store-specific data for this store cannot be entered. | ||
- | |||
- | {{ : | ||
- | ==== Store B ==== | ||
- | |||
- | An example of a store on one remote site which needs to receive stock transfers from a store on another remote site. | ||
- | |||
- | **Store B** exists as a //Collector store// on **sync server**, an //Active store// on **remote site 1**, and a //Transfer store// on **remote site 2**: | ||
- | |||
- | * On **remote site 1**, store-specific data for this store can be entered. | ||
- | * On **sync server**, store-specific data for this store cannot be entered. | ||
- | * On **remote site 2**, store-specific data for this store cannot be entered, and //**is not**// synced from **sync server**. | ||
- | |||
- | {{ : | ||
- | ==== Store C ==== | ||
- | |||
- | Another example of a store on one remote site which needs to receive stock transfers from a store on another remote site. | ||
- | |||
- | **Store C** exists as a //Collector store// on **sync server**, an //Active store// on **remote site 2**, and a //Transfer store// on **remote site 1**: | ||
- | |||
- | * On **remote site 2**, store-specific data for this store can be entered. | ||
- | * On **sync server**, store-specific data for this store cannot be entered. | ||
- | * On **remote site 1**, store-specific data for this store cannot be entered. | ||
- | |||
- | {{ : | ||
- | ==== Store D ==== | ||
- | |||
- | An example of a store on a remote site which needs to also be reportable on the sync server. | ||
- | |||
- | **Store D** exists as an //Active store// on **remote site 2** and as a //Collector store// on **sync server**: | ||
- | |||
- | * On **remote site 2**, store-specific data for this store can be entered. | ||
- | * On **sync server**, store-specific data for this store cannot be entered. | ||
- | |||
- | {{ : | ||
- | ==== Store E ==== | ||
- | |||
- | An example of a store which is local to the sync server only. | ||
- | |||
- | **Store E** exists only on **sync server** (and **primary server**, if different): | ||
- | |||
- | * On **sync server**, store-specific data for this store can be entered. | ||
- | |||
- | {{ : | ||
- | ==== Store F ==== | ||
- | |||
- | An example of a store which is local to a single remote site. | ||
- | |||
- | **Store F** exists on **remote site 1**, but it must also exist on the **sync server** (and **primary server**, if different) as a //Transfer store//, so that it can be centrally managed: | ||
- | |||
- | * On **remote site 1**, store-specific data for this store can be entered. | ||
- | |||
- | {{ : | ||
===== Data types ===== | ===== Data types ===== | ||
The table below is a high-level summary of the different data types: | The table below is a high-level summary of the different data types: | ||
- | * **//Central data//** can only be edited or imported on the primary server, and changes are synced to all sites | + | * **//Central data//** can only be edited or imported on the primary server |
- | * **//Central store data//** can only be edited or imported on the primary server, but changes are only synced to the site where the store is // | + | * **//Central store data//** can only be edited or imported on the central server (or sometimes |
* **//Store data//** can only be edited or imported on the sync site where the store is //active//, and changes are only synced to any site where the store exists as a // | * **//Store data//** can only be edited or imported on the sync site where the store is //active//, and changes are only synced to any site where the store exists as a // | ||
* **//Patient data//** can only be edited on the sync site where its //home store// is //active//, and changes are synced to any site where the patient is visible | * **//Patient data//** can only be edited on the sync site where its //home store// is //active//, and changes are synced to any site where the patient is visible | ||
+ | * **//Name data//** can only be edited or imported on the primary server, and changes are synced to all sites where the name is visible | ||
* **//Local data//** can be edited or imported on any site but doesn' | * **//Local data//** can be edited or imported on any site but doesn' | ||
* **//Sync data//** can only be edited on the central server but doesn' | * **//Sync data//** can only be edited on the central server but doesn' | ||
- | * **//Message data//** can be created on any site and syncs according to the sending/ | + | * **//Message data//** can be created on any site, but can't be edited anywhere, |
+ | * if the receiving store is set, then the message will be processed on the site where that store is active | ||
+ | * if the receiving store is blank and the sending store is set, then the message will be processed only on the central server | ||
+ | * if both are blank, then the message will be processed on all remote sites (i.e. all except the central server) | ||
* Some data can fall into more than one type, depending on the situation. | * Some data can fall into more than one type, depending on the situation. | ||
- | ^ Data ^ | + | ^ Data ^ |
| Items | Central | Primary | Including item-related data e.g. item categories, units, BOM masters | | | Items | Central | Primary | Including item-related data e.g. item categories, units, BOM masters | | ||
- | | Names (except patients) | Central | Primary | Including name-related data e.g. name categories, contacts, tags | | + | | Names (except patients) | Central | Primary | Including name-related data e.g. name categories, contacts | |
| Merging of items, units and names (except patients) | Central | Primary | | | | Merging of items, units and names (except patients) | Central | Primary | | | ||
| Groups and departments | Central | Primary | | | | Groups and departments | Central | Primary | | | ||
Line 197: | Line 98: | ||
| Purchase order categories | Central | Primary | | | | Purchase order categories | Central | Primary | | | ||
| Custom data | Central | Primary | | | | Custom data | Central | Primary | | | ||
- | | Barcodes | Central | Primary | | | + | | Barcodes | Central | Primary | Can be added on any site; duplicates are automatically merged when synced to the primary |
| Currencies | Central | Primary | | | | Currencies | Central | Primary | | | ||
| Options and properties | Central | Primary | | | | Options and properties | Central | Primary | | | ||
Line 215: | Line 116: | ||
| Tenders and quotes (centralised) | Central store | Primary | | | | Tenders and quotes (centralised) | Central store | Primary | | | ||
| Payments (centralised) | Central store | Primary | | | | Payments (centralised) | Central store | Primary | | | ||
- | | Visibility of items and names (except | + | | Visibility of items | Central store | Primary | | |
- | | Visibility of existing | + | | Visibility of names (including existing |
- | | Stores and non sync-related store preferences | Central store | Central | Managed on Central Mirror since v7.13 | + | | Visibility of existing prescribers | Central store | Central |
+ | | Stores and non sync-related store preferences | Central store | Central | | | ||
| Sites and sync-related preferences | Central | Central | Changes on the central server indirectly update related records on remote sites | | | Sites and sync-related preferences | Central | Central | Changes on the central server indirectly update related records on remote sites | | ||
| Dashboard reports | Central | Central | | | | Dashboard reports | Central | Central | | | ||
| Authorisers and authorisation | Central | Central | | | | Authorisers and authorisation | Central | Central | | | ||
- | | Messages | Message | Store | Depends on sending and/or receiving store (which can be blank) | + | | Messages | Message | Store | Depends on sending and/or receiving store | |
| Visibility of new patients and prescribers | Patient | Store | New visibility records sent to central server | | | Visibility of new patients and prescribers | Patient | Store | New visibility records sent to central server | | ||
| Patients and prescribers | Patient | Store | Including patient-related data e.g. PMR, insurance policies | | | Patients and prescribers | Patient | Store | Including patient-related data e.g. PMR, insurance policies | | ||
- | | Merging of patients and prescribers | Patient | Store | | | + | | Merging of patients and prescribers | Patient | Store | Both records must have the same home store | |
- | | Patient events | Patient | Store | Dispensary data | | + | | Patient events | Patient | Store | Dispensary data | |
| Repeats | Patient | Store | Dispensary data; preference can be set to allow processing on all sites where the patient is visible | | | Repeats | Patient | Store | Dispensary data; preference can be set to allow processing on all sites where the patient is visible | | ||
- | | Prescriptions | Patient | Store | Preference can be set sync to all sites where the patient is visible | | + | | Prescriptions | Patient | Store | Preference can be set to sync to all sites where the patient is visible |
+ | | Adverse drug reactions | Patient | Store | Dispensary data | | ||
+ | | Name-related tags, budgets and master-lists | Name | Primary | | ||
| Name notes | Store | Store | | | | Name notes | Store | Store | | | ||
| Customer stock history and requisitions | Store | Store | | | | Customer stock history and requisitions | Store | Store | | | ||
Line 257: | Line 161: | ||
| Logs | Local | Local | | | | Logs | Local | Local | | | ||
| Reminders | Local | Local | | | | Reminders | Local | Local | | | ||
- | | Adverse drug reactions | Local | Local | | | + | |
- | ==== Stores ==== | ||
- | |||
- | These are a special case: | ||
- | * changes to the store record itself (all except the // | ||
- | * the store' | ||
- | * a store should only ever be //Active// on one sync site at a time (usually on the site where it is //Local//) | ||
==== Centralised procurement ==== | ==== Centralised procurement ==== | ||
Line 280: | Line 178: | ||
==== Dispensary data ==== | ==== Dispensary data ==== | ||
- | === Stock transactions === | ||
- | |||
- | By default, prescriptions and any other operations in dispensary mode which affect stock levels are not synced to the sync server, unless the //Include transactions in sync// option is enabled in the store sync preferences, | ||
- | |||
- | If this preference is switched off in a dispensary store on a remote site, the following data will not be synced back to the central sync server: | ||
- | |||
- | * Transactions (including backorders, builds etc.) | ||
- | * Prescriptions | ||
- | * Stock lines | ||
- | * Stocktakes | ||
- | If the preference is switched on, all of the store' | ||
=== Patients === | === Patients === | ||
Line 298: | Line 185: | ||
Since mSupply v4.09, patients have a //home store//, initialised either according to the store they were created in, or according to their most recent prescription. Patients and their related data (patient medication records, repeats, insurance policies) can only be edited in an active dispensary store on the same //home site// where their home store is active. | Since mSupply v4.09, patients have a //home store//, initialised either according to the store they were created in, or according to their most recent prescription. Patients and their related data (patient medication records, repeats, insurance policies) can only be edited in an active dispensary store on the same //home site// where their home store is active. | ||
- | Patients and their related data records will be synced to the primary | + | Patients and their related data records will be synced to the central |
- | Newly created patients will also be made visible in any other dispensary stores on the home site, depending on the store' | + | Newly created patients will also be made visible in any other dispensary stores on the home site, depending on the store' |
=== Other dispensary data === | === Other dispensary data === | ||
Line 306: | Line 193: | ||
Abbreviations, | Abbreviations, | ||
- | Prescribers are also treated as a special kind of store-specific data, like patients i.e. they are editable in any active dispensary store on their home site, synced back to the primary | + | Prescribers are also treated as a special kind of store-specific data, like patients i.e. they are editable in any active dispensary store on their home site, synced back to the central |
=== Transferring patients/ | === Transferring patients/ | ||
- | Watch this space... | + | This can be done only on the central server, by selecting a different dispensary store from the "Home store" pull-down menu. If you confirm that you want to start the transfer process, the patient/ |
===== Transfers ===== | ===== Transfers ===== | ||
Line 356: | Line 243: | ||
* the received quantities for the original purchase order lines will be updated on the primary whenever the corresponding goods received lines are received there (and forwarded from there to the initiating store/site) | * the received quantities for the original purchase order lines will be updated on the primary whenever the corresponding goods received lines are received there (and forwarded from there to the initiating store/site) | ||
* when the primary receives any subsquent updates to goods received lines from the initiating store/site, it will update the quantities in the corresponding purchase order lines | * when the primary receives any subsquent updates to goods received lines from the initiating store/site, it will update the quantities in the corresponding purchase order lines | ||
- | * If centralised procurement is not enabled, the received quantities for the original purchase order lines will be updated in the initiating store/site when it receives the goods received lines from the primary | + | * If centralised procurement is not enabled, the received quantities for the original purchase order lines will be updated in the initiating store/site when it receives the goods received lines from the central server |
===== Reporting ===== | ===== Reporting ===== | ||
Line 407: | Line 294: | ||
- Decide how to configure your server(s) | - Decide how to configure your server(s) | ||
* for a local combined primary and sync server: | * for a local combined primary and sync server: | ||
- | * can your local server be online most of the time (it is more important | + | * can your local server be online most of the time (it is more important |
* have you a fixed external IP address? | * have you a fixed external IP address? | ||
* can you open the necessary firewall ports to allow access to the local server from outside? | * can you open the necessary firewall ports to allow access to the local server from outside? | ||
Line 423: | Line 310: | ||
* single-user store/quiet dispensary (desktop): mSupply single-user desktop | * single-user store/quiet dispensary (desktop): mSupply single-user desktop | ||
* small store/ | * small store/ | ||
- | - Decide on the heirarchy | + | - Decide on the hierarchy |
* which stores supply other stores? | * which stores supply other stores? | ||
* can stores which have the same supplying store transfer to each other, or just with the supplying store? | * can stores which have the same supplying store transfer to each other, or just with the supplying store? | ||
- | * for dispensary stores, do you need to see prescription details on the central server | ||
- Decide on the users for each site and their roles/ | - Decide on the users for each site and their roles/ | ||