Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


This is a living document that continues to be updated as development continues. Please reach out if you have questions.

...

  • The Program identifies which programs offer the orderable. The system won't allow duplicate entries for the same program. Otherwise, it wouldn't be possible to determine which properties (like price, pack size) to use for the orderable.
  • The Product Code is an identifier used to differentiate each product or orderable in the R&R form as well as other external systems the country operates. This code should be defined in your reference data.
  • The Product Name is defined by the reference data gathered during OpenLMIS setup and is displayed on the R&R form for the user.
  • The Description is an additional optional field that can be used to describe the product.
  • The Active flag determines whether the product is available to select in the requisitioning process.
  • The Full Supply flag determines if the product appears on the Full Supply tab. If the flag is FALSE, it will not appear, and if the flag is TRUE, it will appear on all requisition forms on the Full Supply tab. If the flag is set to FALSE, then no users will see this product to select in the requisitioning process within the Full Supply tab.
  • The Display Order determines the line item where the product appears on the requisition form. This should match the paper requisition forms to assist in easy entry.
  • If ordelable has a children it is kit.
  • The Price Per Pack, Pack Rounding Threshold, Pack Size, Round to Zero, and Dispensing unit are defined by the reference data gathered for OpenLMIS setup, and may be displayed on the R&R form for the user. These fields are used in calculations within the R&R form and may affect the Total Requisition Cost.
    • The pack rounding threshold attribute affects how OpenLMIS calculates the number of packs to ship to restock a facility. Note that product inventory and usage are generally reported in "dispensing units," as part of the requisitioning process, where a dispensing unit is the basic unit that a patient is provided when the clinician or pharmacist gives them the product. However the warehouse will ship "packs" of a product, and a pack can contain one or more dispensing units. For example, a dispensing unit for an antibiotic might be a strip of 10 capsules, and the corresponding pack could be a box of 24 strips. OpenLMIS performs the initial calculations for the quantity of each product to ship an SDP in terms of dispensing units, rather than doses or packs. OpenLMIS's last step in these calculations is to round up or round down the number of packs to ship to the SDP. The value of this Rounding Threshold attribute determines when OpenLMIS rounds up or rounds down the number of packs to ship. 
      Returning to our example of strips of antibiotic capsules, if the rounding threshold is set to 6 for this product, then OpenLMIS will round up the number of packs to ship whenever the calculated order quantity of dispensing units that are beyond full packs is greater than this threshold value. For example, if the reorder quantity for the antibiotic is 52 strips, this would equate to 2 full packs plus 4 additional strips (2 x 24 + 4 = 52). Because the rounding threshold for this product is 6, OpenLMIS will round down the order to 2 packs. Conversely, if the reorder quantity for the antibiotic is 55 strips, this would equate to 2 full packs plus 7 additional strips (2x24 + 7 = 55). Because the rounding threshold for this product is 6, and the 7 additional strips exceeds this threshold, OpenLMIS will round up the order to 3 packs. Remember, packs are the units in which the warehouse ships products. Note also, OpenLMIS rounds up when the extra number of dispensing units is greater than the threshold, not when it is greater than or equal to the threshold.
      The can round to zero attribute determines whether OpenLMIS will round the number of packs to ship down to zero when the reorder quantity is less than one full pack and is less than or equal to the rounding threshold for this product. For our antibiotic example, if the reorder quantity was 6 strips (equal to the rounding threshold), then OpenLMIS would round the order quantity down to zero packs if can round to zeroes true. Conversely, it would round the order quantity up to one if can round to zeroes false. In other words, when can round to zeroes set to false, OpenLMIS will always ship at least one full pack when the reorder quantity is one or more dispensing units. If the reorder quantity is zero dispensing units, then OpenLMIS will ship zero packs, regardless of the value of can round to zero.


      Program (required)Product Code (required)Product Name (required)

      Description (optional)

      Active (required)Full Supply (required)Display Order (required)Price Per Pack (optional)packRoundingThreshold (required)netContent (required)roundToZero (required)dispensingUnit (optional)

      children

      (optional)

      Essential MedsAA000300Mercaptopurine
      TRUEFALSE12154.6511FALSEEach
      Family PlanningFP000400Postinor (Levonogesterol)
      TRUETRUE16816940.3011FALSEEach


...

A Processing Schedule must be defined for each Program so that you can determine the Requisition Groups that are required. Processing Schedules are required to determine the Requisition Group that is used to operate the Program at that facility. For requisition-based replenishment, facilities are expected to submit requisitions for each program, on a cyclical basis, based on which schedule their "pull" program operates on. There can be many different processing schedules for varying Programs in the same Requisition Group, but they cannot be different processing schedules for the same Program in the same Requisition Group. This scenario creates confusion on which schedule the program's requisition workflow follows.

Once a schedule has been created, you need to define the individual periods that comprise the schedule. Processing Periods define individual start and end dates associated with a Processing Schedule. OpenLMIS allows you to specify any "start date" and "end date" for each period in a schedule and makes no assumptions about automatically creating periods for a new schedule. New periods are not automatically created so the administrator must create them as needed, to not delay the creation of requisitions. The start date can be further back in time to support migration of data from a legacy system, however there can be no gaps between two consecutive periods. As you are creating periods, the system automatically sets the start date for the new period as one day after the end date of the preceding period. The system does not allow deleting periods once replenishment activity has been initiated for that period, and also does not allow deleting a period from the middle of a schedule.

...

(In here we will also need to explain the process of how locations are created, the resources used and unused, how the update process works, and the association between facility and geographic zone: Chongsun Ahn (Unlicensed) to update)

There are two primary use cases that can benefit from an FHIR server implementation in terms of OpenLMIS serving mCSD locations as a provider and consuming locations as an update consumer.

Use case 1: OpenLMIS serving mCSD Locations (Care Service Update Provider)

...

Understanding Ideal Stock Amounts

The Ideal Stock Amount is a yearly estimate of the “target” number of doses of a vaccine you should have based off of your population served (i.e. catchment population). This model for estimating the number of vaccine doses you need is irrespective of vial size, packaging, manufacturer, etc. so that you focus on a single number of doses that you should have at any given time. For more rural service delivery points, this time is typically the number of doses you should have in a year, divided by 12 months with the idea that your refrigerator can only hold up to about a month's worth of vaccines at a time. The Ideal Stock Amount (ISA) can be used in reordering calculations for OpenLMIS for a vaccine program.

Setting up ISA by Facility, Commodity Type and Period

Ideal Stock Amounts (ISAs) are configured by facility code, commodity type, and period. An initial load of ISAs is done by uploading a .csv file with the following columns:

  • Facility Code is the Facility that will be associated with the ISA.
  • Commodity Type can be the UNSPSC code from https://www.unspsc.org/ 
  • Period is the period or schedule that the ISA will be applied to, for example an ISA for the year may be 200,000 while broken down by a monthly reporting period would only equal to 
  • ISA

...

facilityTypefacilityTypeCodefacilityCode
ClinicprivCFAC01
Private HospitalprivHFAC02
WarehousewarehouseFAC03
ClinicprivCFAC04
Private HospitalprivHFAC05
WarehousewarehouseFAC06

In this example there are three facility types (Clinic, Private Hospital and Warehouse) and six facilities of each type.

Valid Destinations table, apart from program code, consists of facilityTypeCode and destination columns.

...

In organizationName column there should be a name of a supplying organization if there is such.

The Valid Sources table for these configuration is created below:

facilityTypeCodefacilityCodeorganizationName
privCFAC03
privHFAC03
privCFAC06
privHFAC06

In the table there are warehouses’ facility codes (FAC03, FAC06) in the facilityCode column. It means that these facilities supply facilities of privC and privH facility types.

...


Setup Supervisory Nodes, Requisition Groups, Supply Lines 

...

Requisition Group Code (required)Requisition Group Name (required)Supervisory Node Code (required)Description (optional)
RGFP1RG Family Planning 1SN1Supports facilities running the family planning program on a monthly schedule
RGEM1RG Essential Meds 1SN2Supports facilities running the essential meds program
RGFP2RG Family Planning 2SN1.1Supports facilities running the family planning program on a quarterly schedule
RGEPI1RG EPI 1 (districts)SN-NIASSA-PROV/Niassa province approval pointNiassa province approval point (EPI)

...

Supply lines are the mechanism that OpenLMIS uses to route orders to the correct warehouse or facility, to be packed and shipped. Supply lines are specified on a per-program basis. Orders for all programs can be routed to the same warehouse or facility, or can be routed selectively, based on how your supply chain operations are structured. Orders for most programs might be fulfilled by a regional or national warehouse, while orders for a vaccination program might be fulfilled from a local facility which has adequate cold-storage capacity.
Supply lines for external fulfillment are specified for supervisory nodes that are at the top node of their supervisory hierarchy, because this is the point from which the orders are released to a warehouse to be filled. For local fulfillment, the supply lines may be defined at an intermediary level in the supervisory node hierarchy. Then the approval at that intermediary level is considered a final approval that will create an order to fulfill. Each supervisory node at the top of their hierarchy must have a supply line specified for each program that is supported by the requisition groups under its supervision. This includes both requisition groups under its immediate supervision, as a supervisory node only has one requisition group it directly supervises.

Example:

  • The Supervisory Node attribute is the supervisory node code from the section above. It identifies all facilities that this supervisory node supervises, directly or indirectly. For example, all member facilities in this node's requisition group and member facilities from requisition groups from child supervisory nodes. If an intermediary level supervisory node fulfills locally, then they are considered the final approval and should have their own supply line to allow for fulfillment.
  • The Program attribute identifies the program that the requisition group supports. This field must be one of the program codes defined during the program setup process and is required. 
  • The Supplying Facility attribute identifies the warehouse or facility that will fulfill the orders and is required. This field must be one of the facility codes defined during the facility setup process.
  • The Description attribute is for any additional descriptive information that will be helpful when setting up or managing supply lines. This field is optional.
Program (required)Supervisory Node (required)Supplying Facility (required)Description (optional)
FPSN1WH01Ntcheu District Warehouse supplies Family Planning
Essential MedsSN2WH02Balaka District Warehouse supplies Essential Meds


In the Supply Lines list view, you are able to view the facilities that the Supervisory Node supervises by hovering your mouse over the Supervisory Node column.

...

Field Label

Letter Icon

Business Definition

Calculation (Columns are identified by letter icons)

Source/Options

Template Save Validations


Allows tags

Regular Requisition Form Validations


Emergency Requisition Form ValidationsStock- Based Requisition Form ValidationsAdditional Options
SkipSAllows user to skip R&R for a product line item and hide skipped line items in the R&R formNot ApplicableNot Applicable
  • Must be in the first position/column, order cannot be changed.
  • Not required to display
NO
  • Cannot skip product if there is any data in any column (based on a previous R&R or entered by a user)
Not Applicable
  • Cannot skip product if there is any data in any column (based on a previous R&R or entered by a user)
  • Selecting "Disable Skipped Line items" will still display skipped products in the requisition product grid. 
  • Selecting "Hide Skipped Line items" will hide any skipped line items in the requisition product grid so the user doesn't see products they have already skipped. The user will need to select "Add Products" to add them back to the requisition product grid.
Product CodeOUnique identifier for each commodity/product.Not ApplicableReference Data
  • Must be in the second position/column, order cannot be changed.
  • Not required to display
NO



ProductR*Primary name of the product.Not ApplicableReference Data
  • Must be in the third position/column, order cannot be changed.
  • Required to display
NO



Beginning BalanceABased on the Stock On Hand from the previous period. This is quantified in dispensing units.= SOH from the previous period's requisitionSystem Generated
  • Not required to display 
NO
  • Users can modify the pre-populated quantities
  • Only positive numeric integers allowed
  • If C and E are user input, then the Beginning Balance will need to equal C - B - E (+/-) D or an error will be produced when submitting.
  • Column not available
  • Populated by Stock on Hand
  • Users cannot edit quantities
  • Not required to display

Total Received QuantityB*Total quantity received in the reporting period. This is quantified in dispensing units.
User Input
  • If C and E are user input, this is required to display
  • If B source is Stock Cards then it is not required to display
YES
  • Only positive numeric integers allowed
  • If C and E are user input, E = A + B (+/-) D - C
  • Column not available
  • Populated by Stock Cards
  • Users cannot edit quantities
  • Not required to display

Total Consumed QuantityC*Quantity dispensed/consumed in the reporting period. This is quantified in dispensing units.If calculated, C = A + B +/- D - EUser Input or Calculated
  • If C is calculated, E cannot be calculated
  • If C is User Input, E can also be User Input
  • If C is calculated, B is required to display
  • If C source is Stock Cards then it is not required to display
YES
  • If C and E are user input, E = A + B (+/-) D - C
  • If calculated, cannot be negative - error message
  • If User Input, only positive numeric integers allowed
  • Column not available
  • Populated by Stock Cards
  • Users cannot edit quantities
  • Not required to display

Total Losses & AdjustmentsD*All kind of losses/adjustments made at the facility.

User Input

(Source is list of Adjustment Reasons configured in Stock Management)

  • Required to display unless source is Stock Cards
NO
  • In the modal, the sum of the losses and adjustments is shown on the requisition column D. So if C and E are user input:
    • A + B - C + D = E
      • When the sum of D is positive
    • A + B - C - D = E  
      • When the sum of D is negative
  • In the modal, the user can only input positive numbers because when the reason is selected, the system determines if the number is negative or positive
  • Column not available
  • Populated by Stock Cards
  • Users cannot edit quantities
  • Not required to display

Stock on HandE*

Physical count of stock on hand, as of the requisition's processing period end date. This is quantified in dispensing units.


A + B (+/-) D - CCalculated, User Input, or Stock Cards
  • If E is calculated, C cannot be calculated
  • If E is user input, C can also be user input
  • If E source is stock cards then it is not required to display
NO
  • If User Input, only positive numeric integers allowed

Column not available

  • Populated by Stock Cards
  • Users cannot edit quantities
  • Not required to display

Calculated Order QuantityI
H - ECalculated
  • If I is displayed, I is the default reorder number unless an amount is entered into J or K
  • If displayed then A, B, C, D, E must be displayed.
  • If displayed then P, N, X are not required to be displayed
  • Otherwise it is not required to display


NO
  • Must be positive numeric number, or error will display in columns A, B, C, D, or E

Column not available

Updates to this column validation must be added for 3.5 Sebastian Brudziński
Requested quantityJRequested override of calculated order quantity. This is quantified in dispensing units.
User input
  • If J is displayed, W must be displayed
  • Otherwise it is not required to display
NO
  • Only positive numeric integers allowed
  • If left blank, column I, Calculated Order Quantity, will be used to calculate the Total Requisition Cost and Packs to Ship
  • Only positive numeric integers allowed
  • J will be used to calculate the Total Requisition Cost and Packs to Ship
  • Required to display
  • Only positive numeric integers allowed
  • J will be used to calculate the Total Requisition Cost and Packs to Ship
  • Not required to display

Requested Quantity ExplanationWExplanation of the request for a quantity other than the calculated order quantity.
User Input
  • If J is displayed, W must be displayed
  • Otherwise it is not required to display
NO
  • If J contains data, this column must have some data.
  • Only text allowed
  • Required to display
  • Only text allowed


Number of New PatientsFNumber of New patients data
User Input
  • Can either be New patient count or Dispensing units for new patients
  • Not required to display
NO
  • Only positive numeric integers allowed
Column not available

Approved QuantityKFinal approved quantity. This is quantified in dispensing units.
User Input
  • If only I, or J and W are displayed, then K must display for users with Approve rights
NO
  • If only I is displayed, then K is auto-populated with values from I.
  • Users can modify the pre-populated quantities
  • Only positive numeric integers allowed
  • Auto-populated from J
  • Users can modify the pre-populated quantities
  • Only positive numeric integers allowed
  • Auto-populated from J
  • Users can modify the pre-populated quantities
  • Only positive numeric integers allowed

RemarksLAny additional remarks
User Input
  • Not required to display
NO
  • Not required
  • Any text input allowed
  • Not required to display
  • Any text input allowed
  • Not required to display
  • Any text input allowed

TotalYTotal of beginning balance and quantity received.A + BCalculated
  • Not required to display
NO
Column not available
  • Not required to display

Total Stock out DaysXTotal number of days facility was out of stock.
User Input or Stock Cards
  • If N is displayed, X must be displayed
  • If X source is Stock Cards then N must be displayed
  • Otherwise it is not required to display
NO
  • Only positive numeric integers allowed
Column not available
  • Not required to display

Adjusted ConsumptionNTotal consumed quantity after adjusting for stockout days. Quantified in dispensing units.

Roundup(C * (M * 30) / ((M * 30) - X ))) 

M = Number of periods to average (this is identified in the additional options column for P)

Calculated
  • If N is displayed, X must be displayed
  • If Z is displayed, the N must be displayed
  • Otherwise it is not required to display
NO
Column not available

Averaged ConsumptionPAverage consumption over a specified number of periods/months. Quantified in dispensing units.

AMC (P) = (Nt0 + Nt-1 + Nt-2) / 3

Last "t" periods averaged (includes the reporting period being input)

Calculated or Stock Cards
  • Number of periods must be greater than or equal to 2
  • If P is displayed then N and X must be displayed, otherwise N is not required to display
NO


  • Column not available
  • If user is completing an Emergency Requisition, the values shouldn't impact avg consumption calculations for regular requisitions.
Updates to this column validation must be added for 3.5 Sebastian BrudzińskiNumber. of periods to average
Maximum Stock QuantityHMaximum stock calculated based on consumption and max stock amounts. Quantified in dispensing units.P * MaxPeriodStockCalculated
  • Not required to display
NO
Column not available
  • Not required to display

Price Per PackTPrice per pack. Will be blank if price is not defined.
ReferenceData
  • Not required to display
NO
Column not available
  • Not required to display

Packs to ShipVTotal packs to ship based on pack size and applying rounding rulesJ / UCalculated
  • Not required to display
NO
  • If J or K contains no data, then I is the default reorder amount and is used to calculate packs to ship.
  • If J contains data and K does not contain data, then J is used to calculate packs to ship.
  • If K contains data then it overrides any data in I or J, and K is used to calculate packs to ship
Column not available
  • Not required to display

Total CostQTotal cost of the product based on quantity requested. Will be blank if price is not defined.V * TCalculated
  • Not required to display
NO
  • This column updates as I, J, or K are updated
  • If K contains data then it overrides any data in I or J, and then K is used to calculate total cost
  • This column updates as J or K are updated


Dispensing UnitUDispensing unit for this product.
ReferenceData
  • Not required to display
NO
  • Column not available
  • Not required to display

Ideal Stock AmountGThe Ideal Stock Amount is the target quantity for a specific commodity type, facility, and period.
ReferenceData
  • Column not available
NO
  • Column not available


Additional Quantity RequiredZ

Additional quantity needed for New Patients or other factors such as seasonality

Adjusted Consumption (N)+ Additional Quantity Required (Z)



  • If Z is displayed, then N is required to display





...

Messages are translateable pieces of content that are a part of the OpenLMIS-UI. The best way to update a message is by configuring the OpenLMIS-UI to use your implementation's Transifex settings and editing the message directly in Transifex. What Transifex does is replace a message key, which is defined in the UI, with a human readable message. This is how the OpenLMIS-UI supports multiple languages.

See the example below:

<!-- HTML similar to this, will be updated by Transifex once the OpenLMIS-UI is built and run in a browser --> <p>{{ 'example.instructions' | message }}</p> <!-- The above message will be displayed to a person using the OpenLMIS-UI as: --> <p>These are some instructions</p>

The strategy in the OpenLMIS-UI is to not reuse specific message keys, and let the tools in Transifex group messages that are the same together into a single spot for translation. This allows an implementer to further customize small messages such as 'Search' to 'Search Facilities' if the needs of their implementation require more specificity.

...