onaio / fhir-tooling

A command line utility to support FHIR Core content authoring
Other
1 stars 1 forks source link

EUSM - Add support for inventory #157

Closed Wambere closed 2 months ago

Wambere commented 4 months ago

Current inventory / stock structure from opensrp 1.0

From https://example.smartregister.org/opensrp/rest/stockresource/getall?limit=10

{
    "identifier": "19",
    "transaction_type": "Inventory",
    "providerid": "f8e3a9d7-9261-4e3c-a504-114e71fd8fe1",
    "value": 1,
    "version": 1627578612579,
    "deliveryDate": "2021-01-09T00:00:00.000+0000",
    "accountabilityEndDate": "2025-01-09T00:00:00.000+0000",
    "serialNumber": "23461",
    "locationId": "7cb8b6b8-2185-4558-92e7-d2635fb31579",
    "customProperties": {
        "PO Number": "12345",
        "UNICEF section": "Health"
    },
    "serverVersion": 312,
    "type": "Stock",
    "id": "d4f9eefc-9829-4f19-8cce-fb5b40ee9ffb",
    "revision": "v1"
}

@dubdabasoduba is this the right endpoint? which other sources do we have to fill in the payload below?

Wambere commented 4 months ago

FHIR version

copied from here

Location Resource

{
  "resourceType": "Location",
  "id": "493f46d8-6dfe-4505-ab63-9d78c789400e",
  "meta": {
    "versionId"  : "1"                            ,
    "lastUpdated": "2023-02-22T16:03:03.752+00:00",
    "source"     : "#797f2c80a50102e1"
  },
  "identifier": [
    {"use": "official", "value": "493f46d8-6dfe-4505-ab63-9d78c789400e"}
  ],
  "type": {
    "coding": [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/v3-RoleCode",
        "code"   : "work"                                             ,
        "display": "Work Site"
      },
      {
        "system" : "http://terminology.hl7.org/CodeSystem/v3-RoleCode",
        "code"   : "chrd1"                                            ,
        "display": "CHRD1"
      }
    ]
  },
  "status": "active",
  "name": "Bishop Magua",
  "alias": ["Bishop Magua"],
  "description": "This is Bishop Magua in kilimani",
  "physicalType": {
    "coding": [
      {
        "system": "http://terminology.hl7.org/CodeSystem/location-physical-type",
        "code": "bu",
        "display": "Building"
      }
    ]
  },
  "partOf": {"reference": "Location/25c56dd5-4dca-449d-bf6e-665f90d0ff77"},
  "position": {"longitude": 36.7908806585347, "latitude": -1.2988988476440322}
}

Product (Group Resource)

{
  "resourceType": "Group",
  "id": "6f3980e0-d1d6-4a7a-a950-939f3ca7b301",
  "identifier": [
    {"use": "official" , "value": "14524533622"                         },
    {"use": "secondary", "value": "9b54d1cd-42cc-4dd4-ba7f-1c1245e5b30c"}
  ],
  "active": true,
  "type": "substance",
  "actual": false,
  "code": {
    "coding": [
      {
        "system" : "http://snomed.info/sct",
        "code"   : "386452003"             ,
        "display": "Supply management"
      }
    ]
  },
  "name": "Bed nets",
  "characteristic": [
    {
      "code": {
        "coding": [
          {
            "system" : "http://snomed.info/sct",
            "code"   : "23435363"              ,
            "display": "Attractive Item code"
          }
        ]
      },
      "valueBoolean": true
    },
    {
      "code": {
        "coding": [
          {
            "system" : "http://snomed.info/sct",
            "code"   : "34536373"              ,
            "display": "Is it there code"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "system" : "http://snomed.info/sct"               ,
            "code"   : "34536373-1"                           ,
            "display": "Value entered on the It is there code"
          }
        ],
        "text": "Value entered on the It is there code"
      }
    },
    {
      "code": {
        "coding": [
          {
            "system" : "http://snomed.info/sct"             ,
            "code"   : "45647484"                           ,
            "display": "Is it in good condition? (optional)"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "system": "http://snomed.info/sct",
            "code": "45647484-1",
            "display": "Value entered on the Is it in good condition? (optional)"
          }
        ],
        "text": "Value entered on the Is it in good condition? (optional)"
      }
    },
    {
      "code": {
        "coding": [
          {
            "system" : "http://snomed.info/sct"                    ,
            "code"   : "56758595"                                  ,
            "display": "Is it being used appropriately? (optional)"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "system": "http://snomed.info/sct",
            "code": "56758595-1",
            "display": "Value entered on the Is it being used appropriately? (optional)"
          }
        ],
        "text": "Value entered on the Is it being used appropriately? (optional)"
      }
    },
    {
      "code": {
        "coding": [
          {
            "system" : "http://snomed.info/sct"           ,
            "code"   : "67869606"                         ,
            "display": "Accountability period (in months)"
          }
        ]
      },
      "valueQuantity": {"value": 34}
    },
    {
      "code": {
        "coding": [
          {
            "system" : "http://snomed.info/sct",
            "code"   : "1231415"               ,
            "display": "Product Image code"
          }
        ]
      },
      "valueReference": {
        "reference": "Binary/6f3980e0-d1d6-4a7a-a950-939f3ca7b301"
      }
    }
  ]
}

Inventory Item (Group Resource)

{
  "resourceType": "Group",
  "id": "e44e26d0-1f7a-41d6-aa57-99c5712ddd66",
  "identifier": [
    {"use": "secondary", "value": "123214312"                           },
    {"use": "official" , "value": "989867686"                           },
    {"use": "usual"    , "value": "a065c211-cf3e-4b5b-972f-fdac0e45fef7"}
  ],
  "active": true,
  "type": "substance",
  "actual": false,
  "code": {
    "coding": [
      {
        "system" : "http://smartregister.org/",
        "code"   : "78991122"                 ,
        "display": "Supply Inventory"
      }
    ]
  },
  "name": "Bishop Magua -- Bed nets",
  "characteristic": [
    {
      "code": {
        "coding": [
          {
            "system" : "http://smartregister.org/"  ,
            "code"   : "09887657"                   ,
            "display": "Delivery and Accountability"
          }
        ]
      },
      "valuePeriod": {
        "start": "2024-02-01T00:00:00.00Z",
        "end"  : "2024-02-01T00:00:00.00Z"
      }
    },
    {
      "code": {
        "coding": [
          {
            "system" : "http://smartregister.org/",
            "code"   : "98734231"                 ,
            "display": "Unicef Section"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "system" : "http://snomed.info/sct"             ,
            "code"   : "98734231-1"                         ,
            "display": "Value entered on the unicef section"
          }
        ],
        "text": "Value entered on the unicef section"
      }
    },
    {
      "code": {
        "coding": [
          {
            "system" : "http://snomed.info/sct",
            "code"   : "45647484"              ,
            "display": "Donor"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "system" : "http://snomed.info/sct"    ,
            "code"   : "45647484-1"                ,
            "display": "Value entered on the donor"
          }
        ],
        "text": "Value entered on the donor"
      }
    },
    {
      "code": {
        "coding": [
          {
            "system" : "http://smartregister.org/",
            "code"   : "33467722"                 ,
            "display": "Product reference"
          }
        ]
      },
      "valueReference": {
        "reference": "Group/6f3980e0-d1d6-4a7a-a950-939f3ca7b301"
      }
    }
  ]
}

Location <> Inventory Item linkage LIST

{
  "resourceType": "List",
  "id": "af17fe86-561a-44b0-84d3-5e75c753f6f8",
  "identifier": [
    {"use": "official", "value": "f39c5f68-ab0f-4ae5-a9e2-47b0beb73d8e"}
  ],
  "status": "current",
  "title": "Bishop Magua Inventory Item",
  "code": {
    "coding": [
      {
        "system" : "http://smartregister.org/",
        "code"   : "22138876"                 ,
        "display": "Supply Inventory List"
      }
    ],
    "text": "Supply Inventory List"
  },
  "subject": {"reference": "Location/493f46d8-6dfe-4505-ab63-9d78c789400e"},
  "entry": [
    {
      "flag": {
        "coding": [
          {
            "system" : "http://smartregister.org/",
            "code"   : "22138876"                 ,
            "display": "Supply Inventory List"
          }
        ],
        "text": "Supply Inventory List"
      },
      "date": "2024-02-01T00:00:00.00Z",
      "item": {"reference": "Group/e44e26d0-1f7a-41d6-aa57-99c5712ddd66"}
    }
  ]
}
Wambere commented 4 months ago

@dubdabasoduba from the location resource example above, it looks like there is a possibility of a single location having more than one type? e.g both CHRD1 and Work site, is this something we should handle?

Wambere commented 4 months ago

also is it possible to have more than one product on the same inventory? or does each inventory only have one product?

Wambere commented 4 months ago

json payload

{
  "resourceType": "Group",
  "id": "$id",
  "identifier": [
    {"use": "secondary", "value": "$previous_id"},
    {"use": "official" , "value": "$id"},
    {"use": "usual"    , "value": "$usual_id"}
  ],
  "active": $active,
  "type": "$type",
  "actual": $actual,
  "code": {
    "coding": [
      {
        "system" : "http://smartregister.org/supply-inventory",
        "code"   : "78991122",
        "display": "Supply Inventory"
      }
    ]
  },
  "name": "$name",
  "characteristic": [
    {
      "code": {
        "coding": [
          {
            "system" : "http://smartregister.org/delivery-and-accountability",
            "code"   : "09887657"                   ,
            "display": "Delivery and Accountability"
          }
        ]
      },
      "valuePeriod": {
        "start": "$delivery_date",
        "end"  : "$accountability_date"
      }
    },
    {
      "code": {
        "coding": [
          {
            "system" : "http://smartregister.org/unicef-section",
            "code"   : "98734231"                 ,
            "display": "Unicef Section"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "system" : "http://smartregister.org/unicef-section"             ,
            "code"   : "98734231-1"                         ,
            "display": "Value entered on the unicef section"
          }
        ],
        "text": "$unicef_section"
      }
    },
    {
      "code": {
        "coding": [
          {
            "system" : "http://smartregister.org/donor",
            "code"   : "45647484"              ,
            "display": "Donor"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "system" : "http://smartregister.org/donor"    ,
            "code"   : "45647484-1"                ,
            "display": "Value entered on the donor"
          }
        ],
        "text": "$donor"
      }
    },
    {
      "code": {
        "coding": [
          {
            "system" : "http://smartregister.org/product-reference",
            "code"   : "33467722"                 ,
            "display": "Product reference"
          }
        ]
      },
      "valueReference": {
        "reference": "Group/$product_id"
      }
    }
  ]
}

I've also added "endpoints" to the system after the smartregister.org, please edit or remove if not needed

Wambere commented 4 months ago

Potential csv below Mapping to the json payload in the comment above

Column Source
id id
previous_id identifier
usual_id ??
active ??
type type
actual ??
name ??
delivery_date deliveryDate
accountability_date accountabilityEndDate
unicef_section customProperties -> UNICEF section
donor ??
product_id ??

Unused values from opensrp1:

cc @dubdabasoduba @ageryck @AnnieMungai

peterMuriuki commented 3 months ago

Inventory Goup resource.

also is it possible to have more than one product on the same inventory? or does each inventory only have one product?

Nope, because it becomes difficult managing information/characteristics about the products in the group e.g the SerailNumber, quantity, etc.


{
  "resourceType": "Group",
  "id": "e44e26d0-1f7a-41d6-aa57-99c5712ddd66",
  "identifier": [
    {
      "use": "secondary",
      "type": {
        "coding": [
          {
            "system": "http://smartregister.org/codes",
            "code": "PONUM",
            "display": "PO Number"
          }
        ],
        "text": "PO Number"
      },
      "value": "123214312"
    },
    {
      "use": "official",
      "type": {
        "coding": [
          {
            "system": "http://smartregister.org/codes",
            "code": "SERNUM",
            "display": "Serial Number"
          }
        ],
        "text": "Serial Number"
      },
      "value": "989867686"
    },
    {
      "use": "usual",
      "value": "a065c211-cf3e-4b5b-972f-fdac0e45fef7"
    }
  ],
  "active": true,
  "type": "substance",
  "actual": false,
  "code": {
    "coding": [
      {
        "system": "http://smartregister.org/codes",
        "code": "78991122",
        "display": "Supply Inventory"
      }
    ]
  },
  "name": "Bishop Magua -- Bed nets",
  "member": [
    {
      "entity": {
        "reference": "Group/6f3980e0-d1d6-4a7a-a950-939f3ca7b301"
      },
      // delivery date & accountability date
      "period": {
        "start": "2024-02-01T00:00:00.00Z",
        "end": "2024-02-01T00:00:00.00Z"
      },
      "inactive": false
    }
  ],
  "characteristic": [
    {
      "code": {
        "coding": [
          {
            "system": "http://smartregister.org/codes",
            "code": "33467722",
            "display": "Quantity"
          }
        ]
      },
      "valueQuantity": {
        "value": 34
      }
    },
    {
      "code": {
        "coding": [
          {
            "system": "http://smartregister.org/codes",
            "code": "98734231",
            "display": "Unicef Section"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "system": "http://smartregister.org/CodeSystem/eusm-unicef-sections",
            "code": "health",
            "display": "Health"
          }
        ],
        "text": "Health"
      }
    },
    {
      "code": {
        "coding": [
          {
            "system": "http://smartregister.org/codes",
            "code": "45981276",
            "display": "Donor"
          }
        ]
      },
      "valueCodeableConcept": {
        "coding": [
          {
            "system": "http://smartregister.org/CodeSystem/eusm-donors",
            "code": "gavi",
            "display": "GAVI"
          }
        ],
        "text": "GAVI"
      }
    }
  ]
}
peterMuriuki commented 3 months ago

Location update

from the location resource example above, it looks like there is a possibility of a single location having more than one type? e.g both CHRD1 and Work site, is this something we should handle?

location resource can currently have the following types:

{
  "resourceType": "Location",
  "id": "eff94f33-c356-4634-8795-d52340706ba9",
  "meta": {
    "versionId": "2",
    "lastUpdated": "2024-03-25T16:25:52.704+00:00",
    "source": "#4d5d40658197f71e"
  },
  // geometry
  "extension": [ {
    "url": "http://build.fhir.org/extension-location-boundary-geojson.html",
    "valueAttachment": {
      "data": "ICAiZ2VvbWV0cnkiOiB7CiAgICAidHlwZSI6ICJNdWx0aVBvbHlnb24iLAogICAgImNvb3JkaW5hdGVzIjogWwogICAgICBbCiAgICAgICAgWwogICAgICAgICAgWwogICAgICAgICAgICAzNi44OTI3LAogICAgICAgICAgICAtMS40MTA4CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi44OTQ0LAogICAgICAgICAgICAtMS40MTEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg5NDksCiAgICAgICAgICAgIC0xLjQwOTIKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg4NTQsCiAgICAgICAgICAgIC0xLjQwNDgKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg3NTUsCiAgICAgICAgICAgIC0xLjQwMzUKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg3MDgsCiAgICAgICAgICAgIC0xLjQwNTIKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg2OTUsCiAgICAgICAgICAgIC0xLjQwMTEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg2MzgsCiAgICAgICAgICAgIC0xLjQwMTcKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg1NzMsCiAgICAgICAgICAgIC0xLjM5NjYKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg0OTgsCiAgICAgICAgICAgIC0xLjM5NDMKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg0NDksCiAgICAgICAgICAgIC0xLjM4OTIKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg0NDcsciAgICAgICAgICAgIC0xLjM4NTEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg0MzIsCiAgICAgICAgICAgIC0xLjM4NDMKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjgzOTUsCiAgICAgICAgICAgIC0xLjM4NgogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuODM3LAogICAgICAgICAgICAtMS4zODQ2CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi44MzYzLAogICAgICAgICAgICAtMS4zODY0CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi44MjgyLAogICAgICAgICAgICAtMS4zODU1CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi44MjIxLAogICAgICAgICAgICAtMS4zODMKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjgxOTcsciAgICAgICAgICAgIC0xLjM3OQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuODE0OCwKICAgICAgICAgICAgLTEuMzc5NwogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuODExNiwKICAgICAgICAgICAgLTEuMzg0MwogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuODA5NCwKICAgICAgICAgICAgLTEuMzgzCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi44MDg4LAogICAgICAgICAgICAtMS4zODU3CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi44MDU3LAogICAgICAgICAgICAtMS4zODcKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjgwNTEsCiAgICAgICAgICAgIC0xLjM4NDQKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjgwMjYsCiAgICAgICAgICAgIC0xLjM4NjQKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjgwMDIsCiAgICAgICAgICAgIC0xLjM4NQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNzk2LAogICAgICAgICAgICAtMS4zODU5CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43OTU0LAogICAgICAgICAgICAtMS4zODM0CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43OTM3LAogICAgICAgICAgICAtMS4zODI5CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43ODk2LAogICAgICAgICAgICAtMS4zODU4CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43ODY4LAogICAgICAgICAgICAtMS4zODQ4CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43ODI5LAogICAgICAgICAgICAtMS4zODY4CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43ODAxLAogICAgICAgICAgICAtMS4zODM5CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43NjgxLAogICAgICAgICAgICAtMS4zODY1CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43NjAyLAogICAgICAgICAgICAtMS4zODIyCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43NDg5LAogICAgICAgICAgICAtMS4zODI0CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43NDQyLAogICAgICAgICAgICAtMS4zNzg1CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43NDE1LAogICAgICAgICAgICAtMS4zNzk0CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43MjgsCiAgICAgICAgICAgIC0xLjM3MjUKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjcwMjIsCiAgICAgICAgICAgIC0xLjM0OTUKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjY5MjgsCiAgICAgICAgICAgIC0xLjM1MDYKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjY4OTQsCiAgICAgICAgICAgIC0xLjM0NzEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjY4NDksCiAgICAgICAgICAgIC0xLjMzNDgKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjY4MjYsCiAgICAgICAgICAgIC0xLjMzNDkKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjY3ODksCiAgICAgICAgICAgIC0xLjMyNgogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNjc0OSwKICAgICAgICAgICAgLTEuMzI3OAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNjY5MSwKICAgICAgICAgICAgLTEuMzIzNgogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNjcyOCwKICAgICAgICAgICAgLTEuMzIxOQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNjYzNSwKICAgICAgICAgICAgLTEuMzE3MwogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNjcwMiwKICAgICAgICAgICAgLTEuMzAzNgogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNjc0NywKICAgICAgICAgICAgLTEuMzA0OAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNjc4NSwKICAgICAgICAgICAgLTEuMjk3NgogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNjgwNywKICAgICAgICAgICAgLTEuMjk2NQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNjg2MywKICAgICAgICAgICAgLTEuMjgyNAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNjg5MSwKICAgICAgICAgICAgLTEuMjc5NgogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNjg5MywKICAgICAgICAgICAgLTEuMjczCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi42OTE1LAogICAgICAgICAgICAtMS4yNzMxCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi42OTAxLAogICAgICAgICAgICAtMS4yNjUyCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi42OTQ3LAogICAgICAgICAgICAtMS4yNjQzCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi42OTMxLAogICAgICAgICAgICAtMS4yNjIyCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi42OTY4LAogICAgICAgICAgICAtMS4yNjE0CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi42OTMxLAogICAgICAgICAgICAtMS4yNTc4CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi42OTQ5LAogICAgICAgICAgICAtMS4yNTU4CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi42OTM3LAogICAgICAgICAgICAtMS4yNTM5CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi42OTY0LAogICAgICAgICAgICAtMS4yNTM2CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43MDA1LAogICAgICAgICAgICAtMS4yNTU5CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43MDI2LAogICAgICAgICAgICAtMS4yNTE4CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43MTU2LAogICAgICAgICAgICAtMS4yNTQzCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43MTg0LAogICAgICAgICAgICAtMS4yNTY2CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi43MjU1LAogICAgICAgICAgICAtMS4yNDQKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjcyNTQsCiAgICAgICAgICAgIC0xLjI0MDEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjcyNzcsciAgICAgICAgICAgIC0xLjIzOTEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjcyODcsciAgICAgICAgICAgIC0xLjIyODEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljc0NjcsciAgICAgICAgICAgIC0xLjIzMDcKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljc1NjcsciAgICAgICAgICAgIC0xLjIxMjUKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljc3MDEsCiAgICAgICAgICAgIC0xLjIxOTkKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljc3MTYsCiAgICAgICAgICAgIC0xLjIxNwogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNzc4MywKICAgICAgICAgICAgLTEuMjIwMwogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNzg0NSwKICAgICAgICAgICAgLTEuMjA5MQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNzgzNSwKICAgICAgICAgICAgLTEuMjA4MwogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNzg3NCwKICAgICAgICAgICAgLTEuMjA0OAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNzg0NCwKICAgICAgICAgICAgLTEuMjAzNwogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNzg0MSwKICAgICAgICAgICAgLTEuMjAxOAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuNzkxLAogICAgICAgICAgICAtMS4xODg5CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi44MzMzLAogICAgICAgICAgICAtMS4yMTIKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjgzMDEsCiAgICAgICAgICAgIC0xLjIwMzYKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjgzNDEsCiAgICAgICAgICAgIC0xLjIwNzgKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjgzODksCiAgICAgICAgICAgIC0xLjIwNzMKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg0OTIsCiAgICAgICAgICAgIC0xLjIxMTMKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg1MDcsciAgICAgICAgICAgIC0xLjIwMDkKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg1NTYsCiAgICAgICAgICAgIC0xLjE5OTIKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg1OTcsciAgICAgICAgICAgIC0xLjIwMDUKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg2MjksCiAgICAgICAgICAgIC0xLjE4ODIKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg3MjUsCiAgICAgICAgICAgIC0xLjE5NDEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg4NTcsciAgICAgICAgICAgIC0xLjE5MzcKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg5MDIsCiAgICAgICAgICAgIC0xLjE5MDcKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg5ODksCiAgICAgICAgICAgIC0xLjE5MQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuODk1LAogICAgICAgICAgICAtMS4xODU1CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi44OTY0LAogICAgICAgICAgICAtMS4xODQyCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi44OTQzLAogICAgICAgICAgICAtMS4xODA2CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi44ODc3LAogICAgICAgICAgICAtMS4xNzEyCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi44OTM0LAogICAgICAgICAgICAtMS4xNjcKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljg5NzgsCiAgICAgICAgICAgIC0xLjE1ODQKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjkxOTYsCiAgICAgICAgICAgIC0xLjE2CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45MjA3LAogICAgICAgICAgICAtMS4xNjIzCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45MjQsCiAgICAgICAgICAgIC0xLjE2MzIKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjkyNjgsCiAgICAgICAgICAgIC0xLjE2NjQKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjkzMzEsCiAgICAgICAgICAgIC0xLjE2NzIKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljk0MTgsCiAgICAgICAgICAgIC0xLjE3MzEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjkxMjQsCiAgICAgICAgICAgIC0xLjIwNTEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjkxNTUsCiAgICAgICAgICAgIC0xLjIxMDMKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjkzMTQsCiAgICAgICAgICAgIC0xLjIyMDEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjkzNzYsCiAgICAgICAgICAgIC0xLjIxOTIKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljk0OSwKICAgICAgICAgICAgLTEuMjI0NgogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTUzMSwKICAgICAgICAgICAgLTEuMjI0MgogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTU2OCwKICAgICAgICAgICAgLTEuMjI3MQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTYxMiwKICAgICAgICAgICAgLTEuMjI1MgogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTY5NCwKICAgICAgICAgICAgLTEuMjI2OQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTc3NCwKICAgICAgICAgICAgLTEuMjIyMwogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTg0NCwKICAgICAgICAgICAgLTEuMjIwOAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTkxNSwKICAgICAgICAgICAgLTEuMjIyOAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTk1MSwKICAgICAgICAgICAgLTEuMjMwMwogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzcuMDA0LAogICAgICAgICAgICAtMS4yMzQKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjAxMDcsciAgICAgICAgICAgIC0xLjIzNAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzcuMDEyNywKICAgICAgICAgICAgLTEuMjMyOAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzcuMDEyOSwKICAgICAgICAgICAgLTEuMjI4NAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzcuMDE0NSwKICAgICAgICAgICAgLTEuMjI2NQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzcuMDE2NSwKICAgICAgICAgICAgLTEuMjI2NQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzcuMDE3MywKICAgICAgICAgICAgLTEuMjI0NgogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzcuMDIyMiwKICAgICAgICAgICAgLTEuMjI0OQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzcuMDIyOCwKICAgICAgICAgICAgLTEuMjIxNwogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzcuMDMwNywKICAgICAgICAgICAgLTEuMjE4MQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzcuMDMzNSwKICAgICAgICAgICAgLTEuMjEzNAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzcuMDM3OSwKICAgICAgICAgICAgLTEuMjEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjA1MzUsCiAgICAgICAgICAgIC0xLjIwNDEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjA1NzYsCiAgICAgICAgICAgIC0xLjIwNjYKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjA2MjcsciAgICAgICAgICAgIC0xLjIwMjcKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjA4MDMsCiAgICAgICAgICAgIC0xLjIzNDkKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjA4ODIsCiAgICAgICAgICAgIC0xLjIzMTEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjA5NDgsCiAgICAgICAgICAgIC0xLjI0MjMKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjA4NjIsCiAgICAgICAgICAgIC0xLjI0NjIKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjEwMzQsCiAgICAgICAgICAgIC0xLjI2MTkKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjEwMDcsciAgICAgICAgICAgIC0xLjI3MwogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzcuMDk3MiwKICAgICAgICAgICAgLTEuMjcwNwogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzcuMDg1LAogICAgICAgICAgICAtMS4yNzYzCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNy4wODIzLAogICAgICAgICAgICAtMS4yODI2CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNy4wNzczLAogICAgICAgICAgICAtMS4yODE1CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNy4wNzYsCiAgICAgICAgICAgIC0xLjI4ODkKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjA3MjQsCiAgICAgICAgICAgIC0xLjI5MjUKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjA3MjMsCiAgICAgICAgICAgIC0xLjI5NzEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjA3NTcsciAgICAgICAgICAgIC0xLjI5ODQKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjA3NTYsCiAgICAgICAgICAgIC0xLjMwMTMKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM3LjAyNiwKICAgICAgICAgICAgLTEuMjg5NQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzcuMDAxOSwKICAgICAgICAgICAgLTEuMjk4NAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTk0OCwKICAgICAgICAgICAgLTEuMjc5MQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTczOCwKICAgICAgICAgICAgLTEuMjg3MgogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTgzNiwKICAgICAgICAgICAgLTEuMzEyNQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTY1OCwKICAgICAgICAgICAgLTEuMzUxOAogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTYwNCwKICAgICAgICAgICAgLTEuMzQ2CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45MzM5LAogICAgICAgICAgICAtMS4zMzY0CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45MDU2LAogICAgICAgICAgICAtMS4zNjE4CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45MTQ1LAogICAgICAgICAgICAtMS4zNzIzCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45MjEsCiAgICAgICAgICAgIC0xLjM4NDUKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2LjkyMjcsciAgICAgICAgICAgIC0xLjM5MgogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTI4MSwKICAgICAgICAgICAgLTEuMzkyCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45MzE2LAogICAgICAgICAgICAtMS4zOTYzCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45MzY0LAogICAgICAgICAgICAtMS4zOTY4CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45NDIxLAogICAgICAgICAgICAtMS40MDEyCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45NDUzLAogICAgICAgICAgICAtMS40MDY1CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45NDc3LAogICAgICAgICAgICAtMS40MjEzCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45NTQ4LAogICAgICAgICAgICAtMS40MjYyCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45NTk1LAogICAgICAgICAgICAtMS40MzUxCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45NjIxLAogICAgICAgICAgICAtMS40MzY0CiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAgICAgICAzNi45NjEsCiAgICAgICAgICAgIC0xLjQ0MjEKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljk1NzgsCiAgICAgICAgICAgIC0xLjQ0MDQKICAgICAgICAgIF0sCiAgICAgICAgICBbCiAgICAgICAgICAgIDM2Ljk1NTgsCiAgICAgICAgICAgIC0xLjQzNQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTUwMSwKICAgICAgICAgICAgLTEuNDM1NgogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTQyOCwKICAgICAgICAgICAgLTEuNDMwNgogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuOTMxNCwKICAgICAgICAgICAgLTEuNDMwNQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuODg5OSwKICAgICAgICAgICAgLTEuNDEyMwogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuODkwMiwKICAgICAgICAgICAgLTEuNDEwNQogICAgICAgICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgMzYuODkyNywKICAgICAgICAgICAgLTEuNDEwOAogICAgICAgICAgXQogICAgICAgIF0KICAgICAgXQogICAgXQogIH0="
    }
  } ],
  "identifier": [ {
    "use": "official",
    "value": "eff94f33-c356-4634-8795-d52340706ba9"
  } ],
  "status": "active",
  "name": "Nairobi",
  "alias": [ "Kanairo" ],
  "description": "This is Nairobi county",
  "type": [ {
    "coding": [ 
    // for eusm-service points
    {
      "system": "http://smartregister.org/CodeSystem/eusm-service-point-type",
      "code": "csc",
      "display": "Community Service Center"
    },
    // dedeuped from physical type 
    {
      "system": "http://terminology.hl7.org/CodeSystem/location-physical-type",
      "code": "jdn",
      "display": "Jurisdiction"
    } ]
  } ],
  "physicalType": {
    "coding": [ {
      "system": "http://terminology.hl7.org/CodeSystem/location-physical-type",
      "code": "jdn",
      "display": "Jurisdiction"
    } ]
  },
  "partOf": {
    "reference": "Location/c3eb59b0-40a5-4538-b308-7256770399ca"
  }
}
peterMuriuki commented 3 months ago

Linkage resources.

Location -> Inventory

ref:

{
  "resourceType": "List",
  "id": "af17fe86-561a-44b0-84d3-5e75c753f6f8",
  "status": "current",
  "title": "Bishop Magua Inventory Item",
  "code": {
    "coding": [
      {
        "system" : "http://smartregister.org/codes",
        "code"   : "22138876"                 ,
        "display": "Supply Inventory List"
      }
    ],
    "text": "Supply Inventory List"
  },
 // location the inventory is assigned to
  "subject": {"reference": "Location/493f46d8-6dfe-4505-ab63-9d78c789400e"},
  "entry": [
  // inventories assigned to location
    {
      "flag": {
        "coding": [
          {
            "system" : "http://smartregister.org/codes",
            "code"   : "22138876"                 ,
            "display": "Supply Inventory List"
          }
        ],
        "text": "Supply Inventory List"
      },
      "date": "2024-02-01T00:00:00.00Z",
      "item": {"reference": "Group/e44e26d0-1f7a-41d6-aa57-99c5712ddd66"}
    }
  ]
}

Facilitate fhircore sync.

Curate all inventory Groups and List resources linking locations to said inventories and add to single central List resource.

ref:

Wambere commented 2 months ago

Closed by #179