Tutorial: Setting Up Efficient Digital Livestock Feed & Medicine Stock Management
T
Kembali ke Blog

Tutorial: Setting Up Efficient Digital Livestock Feed & Medicine Stock Management

Tutorial
Tim Pilar Inovasi 02 Aug 2026 7 min baca 3,093 kata 198
Manage your livestock feed and medicine stock with an efficient digital system. This article guides you through the setup steps, technology selection, and practical implementation to optimize your farm operations.

Managing feed and livestock medicine stock manually often becomes a source of inefficiency and significant losses for farm operations. Recording errors, missed expired stock, or sudden stock shortages can result in financial losses, decreased livestock productivity, and even fatal health risks. Imagine, an average medium-scale farm can experience losses of up to 5-10% of the total cost of feed and medicine due to poor stock management. Paper-based or simple spreadsheet recording systems are no longer adequate for the complexity of modern operations. This article will guide you in depth on how to build and implement an efficient digital feed and livestock medicine stock management solution. We will discuss basic concepts, technology selection, technical implementation details with functional code examples, as well as best practices to ensure your system runs optimally and sustainably. The goal is to provide actionable guidance for operations managers and farm owners to transform their stock management toward the digital era.

Basic Concepts & Benefits of a Digital Stock Management System

A digital stock management system is not just replacing a notebook with a computer. It is a holistic approach that integrates various operational aspects to provide full visibility and control over your feed and livestock medicine inventory. Its core concepts include real-time recording, batch and expiration date tracking, re-order point automation, and data analysis for better decision-making. The core modules of this system generally include Inventory Management (recording in/out, transfers between warehouses), Purchasing Management (purchase requests, purchase orders, goods receipt), and Reporting (stock reports, movement reports, expiration reports).

The benefits of implementing this system are very concrete. First, Operational Efficiency. With automated recording and tracking, the time spent on physical inventory can be reduced by up to 30-40%. Warehouse staff no longer need to match data manually, reducing the potential for human error which often reaches 10-15% in manual recording. Second, Loss Reduction. The system can automatically provide notifications for items approaching their expiration date, enabling proactive actions such as rapid use or discounts, thereby reducing losses due to damaged or expired goods by up to 15-20%. For example, a broiler chicken farm with 10,000 birds can save millions of rupiah per month just from efficient feed and medicine management.

Third, Procurement Optimization. With accurate and historical stock data, you can predict feed and medicine needs more precisely, avoiding stock-outs that can halt production or delay treatment. The system can calculate the re-order point based on average consumption rates and supplier delivery times, ensuring you order at the right time with optimal quantities. This also enables better price negotiations with suppliers because you have clear and planned purchase volume data. Fourth, Compliance & Audit. Batch and expiration date tracking is crucial for livestock medicines, especially those regulated by regulations. A digital system provides a complete audit trail, facilitating compliance with Good Manufacturing Practices (GMP) standards or regulations from the Ministry of Agriculture regarding the distribution of veterinary drugs.

Fifth, Data-Driven Decision Making. Analytical reports from the system can show consumption trends, the effectiveness of certain feeds on livestock growth, or medicine usage patterns. This data is invaluable for identifying areas for improvement, testing new feed formulas, or optimizing the overall livestock health program. For example, by analyzing feed consumption data per growth phase, you can adjust feeding strategies for maximum efficiency and minimal waste.

Technical Implementation Details & Technology Selection

To build an efficient digital stock management system, choosing the right technology is crucial. We recommend a robust, scalable technology stack supported by a large community, namely the combination of Laravel as the backend framework, PostgreSQL as the database, and Vue.js or React for the frontend. Laravel (currently version 11.x) offers a fast development ecosystem with features such as ORM (Eloquent), database migrations, and integrated API authentication. PostgreSQL (version 16.x) is a highly reliable open-source relational database, supports JSONB features for data flexibility, and has high performance for large data scales.

The database structure is the foundation of the system. We will need main tables such as items (for feed and medicine, with columns name, sku, unit_of_measure, category, is_feed, is_medicine), batches (to track production batches and expiration dates, with columns item_id, batch_number, expiry_date, quantity_initial, quantity_current), warehouses (for storage locations), and stock_transactions (to record every stock movement, both incoming and outgoing). The stock_transactions table will be the center of movement data, with columns such as item_id, batch_id, warehouse_id, transaction_type (e.g., 'in', 'out', 'adjustment'), quantity, transaction_date, reference (e.g., PO number, usage record), and user_id.

Developing a RESTful API with Laravel greatly facilitates integration with the frontend or other systems. We will create endpoints for: GET /api/items (item list), POST /api/items (add new item), GET /api/batches (batch list), POST /api/stock-in (goods receipt), POST /api/stock-out (goods issue), and GET /api/reports/stock-level (stock level report). For the frontend, using Vue.js (version 3.x) or React (version 18.x) will provide a responsive and interactive user experience. Tools such as Vite (version 5.x) for frontend bundling and Tailwind CSS (version 3.x) for styling will speed up the development process.

Another important aspect is authentication and authorization. Laravel Sanctum can be used for API token authentication, ensuring that only authenticated users with the appropriate roles (for example, admin, warehouse_staff, viewer) can perform certain operations. This is very important for maintaining stock data integrity. The entire system will be deployed on a Linux server (for example, Ubuntu Server 22.04 LTS) with Nginx as the web server and PHP-FPM to process PHP requests.

Example Implementation Code & Explanation

This section will show a concrete example of PHP code using Laravel to create a database migration and stock transaction logic. This code can be run directly in your Laravel 11.x project.

1. Database Migration for the stock_transactions Table

This migration will create the stock_transactions table with important columns such as item_id, batch_id, warehouse_id, transaction_type, quantity, transaction_date, and user_id. This is the foundation for recording every stock movement.

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('stock_transactions', function (Blueprint $table) {
            $table->id();
            $table->foreignId('item_id')->constrained('items')->onDelete('cascade');
            $table->foreignId('batch_id')->nullable()->constrained('batches')->onDelete('set null');
            $table->foreignId('warehouse_id')->constrained('warehouses')->onDelete('cascade');
            $table->foreignId('user_id')->constrained('users')->onDelete('cascade');
            $table->enum('transaction_type', ['in', 'out', 'adjustment', 'transfer'])->default('in');
            $table->decimal('quantity', 10, 2);
            $table->string('reference')->nullable(); // e.g., PO-001, USG-005, ADJ-002
            $table->text('notes')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('stock_transactions');
    }
};

Migration Code Explanation: The code above defines the schema of the stock_transactions table. foreignId is used to create relationships to the items, batches, warehouses, and users tables. The batch_id column is made nullable because not all transactions (for example, initial adjustments) may have a specific batch. transaction_type uses an enum to ensure consistency of transaction types. quantity is defined as decimal to accommodate feed or medicine quantities that may not always be whole numbers. The reference and notes columns allow recording additional details for each transaction, which is very useful for auditing.

2. Stock Addition Logic (Stock-In) via Controller

This controller example shows how you can process a request to add new stock (for example, receiving feed from a supplier) into the system. This involves input validation, transaction recording, and updating the quantity in the batches table.

<?php

namespace App\Http\Controllers;

use App\Models\Item;
use App\Models\Batch;
use App\Models\Warehouse;
use App\Models\StockTransaction;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\ValidationException;

class StockController extends Controller
{
    public function stockIn(Request $request)
    {
        $request->validate([
            'item_id' => 'required|exists:items,id',
            'warehouse_id' => 'required|exists:warehouses,id',
            'batch_number' => 'required|string|max:255',
            'expiry_date' => 'nullable|date|after_or_equal:today',
            'quantity' => 'required|numeric|min:0.01',
            'reference' => 'nullable|string|max:255',
            'notes' => 'nullable|string',
        ]);

        try {
            DB::beginTransaction();

            $item = Item::find($request->item_id);
            $warehouse = Warehouse::find($request->warehouse_id);

            // Find or create batch
            $batch = Batch::firstOrCreate(
                ['item_id' => $item->id, 'batch_number' => $request->batch_number],
                ['expiry_date' => $request->expiry_date, 'quantity_initial' => 0, 'quantity_current' => 0]
            );

            // Update batch quantity
            $batch->quantity_current += $request->quantity;
            $batch->quantity_initial += $request->quantity; // Assuming initial quantity also grows on new stock-in for same batch number
            $batch->save();

            // Record transaction
            StockTransaction::create([
                'item_id' => $item->id,
                'batch_id' => $batch->id,
                'warehouse_id' => $warehouse->id,
                'user_id' => auth()->id(), // Assuming user is authenticated
                'transaction_type' => 'in',
                'quantity' => $request->quantity,
                'reference' => $request->reference,
                'notes' => $request->notes,
            ]);

            DB::commit();

            return response()->json(['message' => 'Stock-in recorded successfully.', 'batch' => $batch], 201);

        } catch (ValidationException $e) {
            DB::rollBack();
            return response()->json(['errors' => $e->errors()], 422);
        } catch (\Exception $e) {
            DB::rollBack();
            return response()->json(['message' => 'Failed to record stock-in.', 'error' => $e->getMessage()], 500);
        }
    }
}

Controller Code Explanation: The stockIn function receives data from the request, validates it to ensure all required inputs are present and in the correct format. Then, within a database transaction (DB::beginTransaction), it finds or creates a new batch entry if one does not already exist for the specific item_id and batch_number. After that, the quantity_current and quantity_initial quantities on the batch are updated. Finally, a new entry is created in the stock_transactions table to record the details of this receipt. The use of DB::beginTransaction and DB::commit/DB::rollBack is very important for maintaining data consistency; if there is a failure in the middle of the process, all changes will be canceled. auth()->id() assumes the system has Laravel user authentication.

Example Payload, Error Message, and Handling

The interaction between frontend and backend in a digital stock management system will mostly go through data exchange in JSON format. Understanding the expected payload structure and how the system responds to errors is key to efficient debugging and development.

1. Example JSON Payload for a Stock-In Transaction

The following is an example JSON payload that will be sent from the frontend application (for example, a goods receipt form) to the POST /api/stock-in endpoint that we created in Section 3.

{
    "item_id": 101,
    "warehouse_id": 1,
    "batch_number": "PakanA-20240315-001",
    "expiry_date": "2025-03-15",
    "quantity": 500.75,
    "reference": "PO-202403-0012",
    "notes": "Receipt of Ayam Broiler Starter feed from PT. Pakan Jaya"
}

Payload Explanation: This payload includes item_id (the unique ID for the feed/medicine), warehouse_id (the warehouse location ID), batch_number (the specific batch number of the feed/medicine), expiry_date (the expiration date, important for FIFO/FEFO), quantity (the quantity received, can be decimal), reference (the Purchase Order number or other reference), and notes for additional details. Each of these fields is validated by the backend to ensure data integrity.

2. Example Error Message and Its Handling

When there is a problem with the input or business logic, the API must return an informative error message. The following is an example error response from Laravel when validation fails.

{
    "message": "The given data was invalid.",
    "errors": {
        "quantity": [
            "The quantity field must be at least 0.01."
        ],
        "expiry_date": [
            "The expiry date must be a date after or equal to today."
        ]
    }
}

Error Message Explanation: The error message above indicates that there are two validation problems: quantity is less than the allowed minimum and expiry_date is invalid (possibly a past date). ValidationException in Laravel will automatically produce a JSON response like this with HTTP status 422 (Unprocessable Entity). The frontend must be designed to catch this response and display the relevant error message to the user next to the problematic form input.

Error Handling in the Backend: In the try-catch block in the controller, we specifically catch ValidationException and return a 422 response. For other errors not related to validation (for example, database issues, server errors), we catch the general \Exception and return a 500 response (Internal Server Error) with a more generic message. This is important for security, so that internal server details are not exposed to the public. Error logging in the backend is also crucial using facilities such as Laravel Log to facilitate debugging without having to display error details to the user. For example, the error Failed to record stock-in could mean the database connection is lost or there is another, more complex problem, the details of which will only be visible in the server log.

Best Practices in Digital Feed & Livestock Medicine Stock Management

  1. Strict Implementation of FIFO/FEFO: Apply the First-In, First-Out (FIFO) or First-Expired, First-Out (FEFO) principles for feed and medicine. The system must be able to identify which batch should be used first based on the entry date or expiration date, minimizing the risk of expired products and losses.
  2. Strong Input Data Validation: Ensure that every piece of data entering the system is strictly validated on the server side. This includes validation of data types, value ranges, date formats, and the existence of related IDs (for example, item_id must exist in the items table). Strong validation prevents dirty data from damaging the integrity of the system.
  3. Automatic Batch & Expiration Tracking System: Every feed or medicine item must have a recorded batch number and expiration date. The system must be able to send automatic notifications to the operations manager or warehouse staff when a batch is approaching its expiration date (for example, 30, 60, or 90 days in advance) to enable proactive action.
  4. Integration with Other Systems (Optional but Recommended): Consider integration with other systems such as a livestock ERP (for livestock population data, feeding schedules), a Point of Sale system (if there is retail sales), or even a supplier electronic purchasing system. This integration reduces duplicate data entry and improves overall data accuracy.
  5. Continuous Reporting & Data Analysis: Utilize the system's reporting capabilities to routinely review stock data, consumption trends, and procurement performance. Reports such as "Stock Movement Report", "Near Expiry Report", and "Consumption Rate Analysis" are vital for strategic decision-making and identifying areas for improvement.
  6. Data Security and Role-Based Access Control (RBAC): Protect your stock data by implementing Role-Based Access Control. Ensure that only authorized users (for example, warehouse staff, purchasing managers) can perform certain operations (for example, adding/reducing stock, changing prices). Use standard security practices such as data encryption in transit and at rest.
  7. Automatic Data Backup Plan: Stock data is a valuable asset. Implement an automatic database backup schedule (for example, daily) to a secure and separate storage location (for example, cloud storage). Ensure you have a tested data recovery procedure to face worst-case scenarios such as server failure or cyber attacks.
  8. Complete Audit Trail: Every change to stock (in, out, adjustment) must be recorded in detail with who did it, when, and why. This is very important for accountability, dispute resolution, and compliance with internal and external audit requirements.

Frequently Asked Questions (FAQ)

  1. Why should I switch to a digital stock management system if a spreadsheet is enough?

    Although a spreadsheet may feel sufficient for a small scale, a digital system offers real-time accuracy, automated batch and expiration tracking, and much more advanced reporting capabilities. Spreadsheets are prone to human error, difficult to scale for many items or locations, and do not provide proactive notifications. A digital system significantly reduces losses due to expiration and operational inefficiencies, often saving more than its initial investment.

  2. How much initial investment is needed to set up this system?

    The initial investment varies depending on scale and complexity. For a custom solution like the one described, the cost can range from Rp 50 million to Rp 200 million or more, depending on features, integration, and development duration. This includes development costs (if custom), software licenses (if any), server infrastructure, and training. However, savings from efficiency and reduced losses often return this investment within 1-2 years.

  3. Can this system be integrated with my existing livestock ERP system?

    Yes, one of the main advantages of the RESTful API approach we recommend is ease of integration. This system is designed to be able to communicate with other systems via API. For example, livestock population data from the ERP can be used to predict feed needs, or feed stock issuance data can be automatically fed into the accounting module in your ERP. This integration requires the development of appropriate API interfaces on both sides.

  4. What about the security of stock data and other sensitive information?

    Data security is a top priority. We implement best practices such as data encryption in transit (HTTPS/SSL) and at rest (database encryption), strict role-based access control (RBAC), and audit trails for all activities. Servers will be secured with firewalls, regular updates, and monitoring. All data will be stored on secure servers and backed up regularly to prevent data loss.

  5. How does this system handle stock management for multiple warehouse or farm locations?

    The system is designed to support multiple locations. Each stock transaction will be associated with a specific warehouse_id, allowing you to track stock per warehouse or per farm separately. You can transfer stock between warehouses, and the system will automatically update the quantities at both locations. Reports can also be filtered or combined by location, providing a clear picture of inventory across the organization.

  6. How difficult is the learning curve for staff who will use this system?

    The learning curve is designed to be as minimal as possible. The user interface (UI) will be made intuitive and user-friendly, with a focus on logical and clear workflows. Initial training will be provided to staff, and user documentation will be available. With good design and adequate support, staff can adapt quickly, usually within days or weeks, depending on the complexity of their role in the system.

Implementing a digital feed and livestock medicine stock management system is no longer an option, but a necessity for modern farms that want to achieve maximum efficiency and reduce losses. By following this guide, you have understood the technical and operational foundations for building a robust and adaptive solution. From choosing the right technology such as Laravel and PostgreSQL, to implementing best practices such as FIFO/FEFO and data security, every step is crucial to success. If you are an operations manager, clinic owner, or decision-maker ready to take your inventory management to the next level, our team with experience in SIMRS, ERP Poultry, and system integration is ready to help. Don't let manual stock management hinder your growth potential. Contact Nugroho Setiawan today for a consultation and development of technology solutions tailored to your organization's unique needs.

Related solutions by PT Pilar Inovasi Informatika (Pilar Inovasi IT products): PilarPOS Agriculture ERP SIMRS (Hospital Information System). Need a free consultation?

Terakhir diperbarui 30 Oct 2026

Komentar

Komentar ditinjau sebelum tampil.

Belum ada komentar. Jadilah yang pertama!