{% extends "inventory/base.html" %}{% load humanize_tags %} {% block title %}Health{% endblock %} {% block content %}

Inventory health

Inventory value{{ h.total_value|money }}
COGS (12 mo){{ h.annual_cogs|money }}
Turnover{{ h.turnover|num:1 }}x
Days of inventory{{ h.days_of_inventory|num:0 }}
Excess (> {{ policy.excess_months|floatformat:"-1" }} mo cover){{ h.excess_value|money }}

Aging by days since last issue

{% for label, n, v in h.aging %}{% endfor %}
BucketSKUsValue at risk
{{ label }}{{ n }}{{ v|money }}

Near-expiry stock FEFO: issue earliest expiry first

{% for e in h.expiry %}{% empty %}{% endfor %}
SKUReceivedQtyExpiryStatus
{{ e.item.sku }}{{ e.layer.date }}{{ e.layer.qty_left|qty }}{{ e.layer.expiry }} ({{ e.days }}d){{ e.status }}{% if e.status != 'expired' %} - issue first{% endif %}
None.

Non-moving stock no issue for 180+ days

{% for r in h.dead %}{% empty %}{% endfor %}
SKUNameQtyValueDays since issueBucketNRV
{{ r.item.sku }}{{ r.item.name }}{{ r.qty|qty }}{{ r.value|money }}{{ r.days|default:"never" }}{{ r.bucket }}{{ r.item.nrv|default_if_none:"" }}
None.

Excess stock top 25 by value

{% for r in h.excess|slice:":25" %}{% empty %}{% endfor %}
SKUNameOn handMonthly demandMonths coverExcess qtyExcess value
{{ r.item.sku }}{{ r.item.name }}{{ r.qty|qty }}{{ r.monthly|num:1 }}{{ r.cover|num:1 }}{{ r.excess_qty|num:0 }}{{ r.excess_value|money }}
None.

Stockout days, last 12 months top 25

{% for r in h.stockouts|slice:":25" %}{% empty %}{% endfor %}
SKUNameABCDays at zero stock
{{ r.item.sku }}{{ r.item.name }}{{ r.abc }}{{ r.days }}
None.
{% endblock %}