Versions Compared

Key

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

This page provides acts as the software requirement specification for the OpenLMIS and OpenSRP integration for the minimum viable product integration for stock management.

...

Commodity Type: Classification of commodity. An example in OpenLMIS is product code BCG20. BCG20 is a 20 dose vial of BCG. When we order items in OpenLMIS, we don't care which trade item is sent, we just need the specific commodity type.
Dispensing Unit: A dispensing unit is the basic unit that a patient receives when the clinician or pharmacist provides them a product. Product inventory and usage is generally tallied and reported in dispensing units, as part of the requisitioning process.
Lot:
A collection of trade items of the same type that were all manufactured at the same time from a single manufacturer. Each lot has an identification number and expiration date. Each lot has passed laboratory to test composition before release to the market.
Net Content: The amount of dispensing units contained in each pack
Program:
A program is an independently funded project that is implemented in OpenLMIS and OpenSRP. Each Program has a specific set of Orderables, a complex configuration including Requisition Form settings and Program-specific user permissions, and a network of Facilities that are participating in the Program.
Trade item: An item meant for trade that commonly has a specific manufacturer and are defined outside of OpenLMIS. An example of a trade item in OpenLMIS is product code Intervax BCG 20. This is a trade item that is branded by Intervax and fulfills the BCG20 commodity type that would be ordered.

...

  • Make a Bulk Trade Item Issue/Receive - This is a feature in OpenLMIS, but not in SIGLUS.
  • Make a Bulk Trade Item Adjustment - This is a feature in OpenLMIS, but not in SIGLUS.
  • Automatic receive at a location that was generated from an issue. We will require each health worker to enter the appropriate stock event on their device, if a trade item is issued to another location. This includes sub locations.
  • Adding trade items or commodity types from the OpenSRP Android client.
  • VVM ← We need to verify this with the OpenLMIS community

Core Workflows

As an Immunization Nurse I need to...

...

  • OpenLMIS GET Endpoints:
    • Reference Data Service
      • CommodityTypes - Returns an array of all commodityTypes in the system
      • CommodityTypes/{id} - Returns a specific commodity type
      • facilities/minimal - Returns an array of facilities with id and name only
      • facilities/{id} - Returns a specific facility
      • geographicLevels - Returns an array of geographicLevels
      • programs - Returns an array of all programs
      • programs/{id} - Returns a specific program
      • stockAdjustmentReasons - Returns an array of stockAdjustmentReasons
      • stockAdjustmentReasons/{id} - Returns a specific stock adjustment reason
      • tradeItems - Returns an array of tradeItems
      • tradeItems/{id} - Returns a specific tradeItem
    • Stock Management Service
      • stockCardLineItemReasons - Returns an array of stockCardLineItemReasons
      • stockCardLineItemReasons/{id} - Returns a specific stock card line item reason
      • stockCards - Returns an array of stock cards, result is an intersection of user rights and request parameters.
      • stockCards/{id} - Returns a specific stock card
      • validDestinations - Get a list of valid destinations of a program and a facility type.
      • validReasons - Return a list of valid reasons based on program and facility type.
  • OpenLMIS POST Endpoints:
    • Stock Management Service
      • stockEvents - Create a new stock event with one or more orderables
  • OpenSRP GET Endpoints:
    • stockresource/getall - Returns a list of stock events
  • OpenSRP POST Endpoints:
    • stockresource/add - Add a stock event to the OpenSRP server

There are a number of resources that may need to be created in OpenSRP server. Below is a list of items that may need to be created:

  • GET a list of locations by geographic hierarchy
  • GET a list of programs, trade items and commodity types
  • GET a list of reasons
  • POST additions and updates to programs, trade items and commodity types
  • POST additions and updates to reasons

...

  • OPV Stock Received: The blue header text "OPV" will be dynamically populated based on the name of the trade item
  • Date OPV stock received: The text "OPV stock" will be removed and it will just say "Date received". No functionality will change on this widget
  • Reason: This is populated from a list of valid stock card line item reasons from OpenSRP server (originally from OpenLMIS).
  • Received from: This radio button will change to two fields:
    • Location: A location hierarchy widget will be available based on the OpenSRP locations. Note that this assumes there is a one-to-one match between locations in OpenSRP and OpenLMIS.
    • Other: This is a field that allows them to type in text if not from a location that's in the hierarchy.
  • Vials OPV received: The text "Vials" will be populated based on the unit of measure imported from OpenLMIS and the text "OPV" will be replaced with the name of the orderable imported from OpenLMIS
  • (new) VVM: A radio button will be displayed with the VVM number stage numbers (1-42)
  • Note: We may have a problem here if another location tracks lots and the lot isn't available already on this device.

...

  • OPV Stock Issued: The blue header text "OPV" will be dynamically populated based on the name of the trade item
  • Date OPV stock issued: The text "OPV stock" will be removed and it will just say "Date received". No functionality will change on this widget.
  • Reason: This is populated from a list of valid stock card line item reasons from OpenSRP server (originally from OpenLMIS).
  • Issued to: This radio button will change to two fields:
    • Location: A location hierarchy widget will be available based on the OpenSRP locations. Note that this assumes there is a one-to-one match between locations in OpenSRP and OpenLMIS.
    • Other: This is a field that allows them to type in text if not from a location that's in the hierarchy.
  • Vials OPV issued: The text "Vials" will be populated based on the unit of measure imported from OpenLMIS and the text "OPV" will be replaced with the name of the trade item imported from OpenLMIS
  • (new) VVM: A radio button will be displayed with the VVM number stage numbers (1-42)
  • Wasted Vials: The text "Vials" will be populated based on the unit of measure imported from OpenLMIS
  • (new) Wasted Reason: If the "Wasted Vials" field is populated, a new "Wasted Reason" field will display with a radio button that's populated by the OpenLMIS program specific adjustment metadata. If the users are able to enter a free text reason, this radio button will include an "other" option that will toggle the next field
  • Note: The suggested number of vials will be based on the number of children immunized today by commodity type. It's possible that this calculation will be inaccurate if there are multiple lots for a particular commodity type that were used for a particular day. Maybe we can perform a smarter calculation here based on the total stock on hand for this trade item and lot compared to the number of children immunized today minus any other trade item debits that also happened today to this same location.

...