{% extends 'ops/base_ops.html' %} {% block title %}Intake lineage - {{ batch.batch_reference }} - IXG Operations{% endblock %} {% block content %} {% if messages %} {% for m in messages %}
{{ m }}
{% endfor %} {% endif %}
{% csrf_token %} {{ formset.management_form }} {% if formset.non_form_errors %} {% for e in formset.non_form_errors %}
{{ e }}
{% endfor %} {% endif %} {% for f in formset.forms %} {% for hidden in f.hidden_fields %}{{ hidden }}{% endfor %} {% endfor %}
Harvest intake Allocated (kg) Remove
{{ f.harvest_intake }} {% for e in f.harvest_intake.errors %}
{{ e }}
{% endfor %}
{{ f.weight_allocated_kg }} {% for e in f.weight_allocated_kg.errors %}
{{ e }}
{% endfor %}
{% if f.instance.pk %}{{ f.DELETE }}{% endif %}
Cancel
Weights
{% if difference is not None %} {% endif %}
Allocated to this batch{{ total_allocated }} kg
Batch weight{{ batch.weight_kg|default:'-' }} kg
Difference {{ difference }} kg

The platform shows these two figures side by side; it does not reconcile them. A difference where the batch is heavier means part of the batch is not traced to an intake; allocations above the batch weight are the usual processing loss.

What this feeds
  • Lineage — the batch needs at least one intake
  • Geolocation — every linked intake must point at a verified origin zone
  • Intake data — every linked intake needs a date and a weight

This table is what the due-diligence case for {{ batch.batch_reference }} reads, and what a buyer or an auditor traces the batch back through.

One intake, limited weight

An intake received a finite weight of shea, and what is allocated out of it is counted across every batch. An allocation that would take more than the intake received is refused, whether the excess is over the intake's own weight or over what other batches have already taken.

Removing a row here deletes the link only — the intake record itself is untouched.

{% endblock %}