{"id":2352,"date":"2026-04-07T10:33:10","date_gmt":"2026-04-07T10:33:10","guid":{"rendered":"https:\/\/aaxonix.com\/resources\/?post_type=case_study&#038;p=2352"},"modified":"2026-04-24T11:15:17","modified_gmt":"2026-04-24T11:15:17","slug":"pharmacy-chain-expiry-write-offs-zoho-inventory","status":"publish","type":"case_study","link":"https:\/\/aaxonix.com\/resources\/case-studies\/pharmacy-chain-expiry-write-offs-zoho-inventory\/","title":{"rendered":"How a 17-Outlet Pharmacy Chain Cut Expiry Write-Offs by 68%"},"content":{"rendered":"<style>\n  \/* \u2500\u2500 reset & base \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .cs-body {\n    font-family: 'Poppins', sans-serif;\n    font-size: 1rem;\n    line-height: 1.7;\n    color: #1a1a2e;\n    max-width: 860px;\n    margin: 0 auto;\n    padding: 0 0 3rem;\n  }\n  .cs-body h2 {\n    font-size: 1.45rem;\n    font-weight: 700;\n    color: #0f172a;\n    margin: 2.8rem 0 1.1rem;\n    letter-spacing: -0.01em;\n  }\n  .cs-body p {\n    margin: 0 0 1rem;\n    color: #334155;\n  }\n\n  \/* \u2500\u2500 eyebrow \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .cs-eyebrow {\n    display: inline-block;\n    font-size: 0.72rem;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.12em;\n    color: #2563eb;\n    background: #eff6ff;\n    border-radius: 4px;\n    padding: 0.25rem 0.75rem;\n    margin-bottom: 0.75rem;\n  }\n\n  \/* \u2500\u2500 snapshot tiles (4-up) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .cs-snapshot {\n    display: grid;\n    grid-template-columns: repeat(4, 1fr);\n    gap: 1rem;\n    margin: 1.8rem 0 2.4rem;\n  }\n  @media (max-width: 680px) {\n    .cs-snapshot { grid-template-columns: repeat(2, 1fr); }\n  }\n  .cs-snap-tile {\n    background: #f8fafc;\n    border: 1px solid #e2e8f0;\n    border-radius: 10px;\n    padding: 1.1rem 1rem;\n    text-align: center;\n  }\n  .cs-snap-val {\n    display: block;\n    font-size: 1.35rem;\n    font-weight: 700;\n    color: #2563eb;\n    line-height: 1.2;\n    margin-bottom: 0.3rem;\n  }\n  .cs-snap-label {\n    font-size: 0.75rem;\n    color: #64748b;\n    font-weight: 500;\n    line-height: 1.4;\n  }\n\n  \/* \u2500\u2500 problem grid (3 cards) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .cs-problem-grid {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 1.2rem;\n    margin: 1.2rem 0 2rem;\n  }\n  @media (max-width: 680px) {\n    .cs-problem-grid { grid-template-columns: 1fr; }\n  }\n  .cs-problem-card {\n    background: #fff;\n    border: 1px solid #e2e8f0;\n    border-top: 3px solid #ef4444;\n    border-radius: 10px;\n    padding: 1.3rem 1.2rem 1.2rem;\n  }\n  .cs-pc-icon {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 42px;\n    height: 42px;\n    background: #fef2f2;\n    border-radius: 8px;\n    margin-bottom: 0.85rem;\n  }\n  .cs-pc-icon svg {\n    width: 22px;\n    height: 22px;\n    stroke: #ef4444;\n    fill: none;\n    stroke-width: 2;\n    stroke-linecap: round;\n    stroke-linejoin: round;\n  }\n  .cs-problem-card h3 {\n    font-size: 0.92rem;\n    font-weight: 700;\n    color: #0f172a;\n    margin: 0 0 0.45rem;\n  }\n  .cs-problem-card p {\n    font-size: 0.84rem;\n    color: #475569;\n    margin: 0;\n  }\n\n  \/* \u2500\u2500 solution stack \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .cs-solution-stack {\n    display: flex;\n    flex-direction: column;\n    gap: 0.85rem;\n    margin: 1.2rem 0 2rem;\n  }\n  .cs-sol-row {\n    display: flex;\n    align-items: flex-start;\n    gap: 1rem;\n    background: #f8fafc;\n    border: 1px solid #e2e8f0;\n    border-radius: 10px;\n    padding: 1rem 1.2rem;\n  }\n  .cs-sol-badge {\n    flex-shrink: 0;\n    width: 36px;\n    height: 36px;\n    background: #2563eb;\n    color: #fff;\n    border-radius: 8px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: 0.78rem;\n    font-weight: 700;\n  }\n  .cs-sol-body { flex: 1; }\n  .cs-sol-product {\n    font-size: 0.82rem;\n    font-weight: 700;\n    color: #2563eb;\n    text-transform: uppercase;\n    letter-spacing: 0.06em;\n    margin-bottom: 0.2rem;\n  }\n  .cs-sol-module {\n    font-size: 0.93rem;\n    font-weight: 600;\n    color: #0f172a;\n    margin-bottom: 0.25rem;\n  }\n  .cs-sol-body p {\n    font-size: 0.84rem;\n    color: #475569;\n    margin: 0;\n  }\n\n  \/* \u2500\u2500 before vs after table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .cs-ba-table {\n    width: 100%;\n    border-collapse: collapse;\n    margin: 1.2rem 0 2rem;\n    font-size: 0.88rem;\n  }\n  .cs-ba-table thead tr {\n    background: #1e3a8a;\n    color: #fff;\n  }\n  .cs-ba-table thead th {\n    padding: 0.75rem 1rem;\n    text-align: left;\n    font-weight: 600;\n    font-size: 0.82rem;\n    letter-spacing: 0.04em;\n  }\n  .cs-ba-table tbody tr:nth-child(odd) {\n    background: #f8fafc;\n  }\n  .cs-ba-table tbody tr:nth-child(even) {\n    background: #fff;\n  }\n  .cs-ba-table td {\n    padding: 0.7rem 1rem;\n    border-bottom: 1px solid #e2e8f0;\n    color: #334155;\n    vertical-align: top;\n  }\n  .cs-ba-table td:first-child {\n    font-weight: 600;\n    color: #0f172a;\n    white-space: nowrap;\n  }\n  .cs-ba-before { color: #b91c1c !important; }\n  .cs-ba-after  { color: #15803d !important; font-weight: 600 !important; }\n\n  \/* \u2500\u2500 timeline \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .cs-timeline {\n    position: relative;\n    padding-left: 2.4rem;\n    margin: 1.2rem 0 2rem;\n  }\n  .cs-timeline::before {\n    content: '';\n    position: absolute;\n    left: 15px;\n    top: 0;\n    bottom: 0;\n    width: 2px;\n    background: #e2e8f0;\n  }\n  .cs-tl-item {\n    position: relative;\n    margin-bottom: 1.8rem;\n  }\n  .cs-tl-item:last-child { margin-bottom: 0; }\n  .cs-tl-badge {\n    position: absolute;\n    left: -2.4rem;\n    top: 0.1rem;\n    width: 32px;\n    height: 32px;\n    background: #2563eb;\n    color: #fff;\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: 0.72rem;\n    font-weight: 700;\n    border: 3px solid #fff;\n    box-shadow: 0 0 0 2px #2563eb;\n  }\n  .cs-tl-content {\n    background: #f8fafc;\n    border: 1px solid #e2e8f0;\n    border-radius: 10px;\n    padding: 1rem 1.2rem;\n  }\n  .cs-tl-title {\n    font-size: 0.95rem;\n    font-weight: 700;\n    color: #0f172a;\n    margin: 0 0 0.2rem;\n  }\n  .cs-tl-dur {\n    font-size: 0.76rem;\n    font-weight: 600;\n    color: #2563eb;\n    background: #eff6ff;\n    border-radius: 4px;\n    padding: 0.1rem 0.5rem;\n    display: inline-block;\n    margin-bottom: 0.5rem;\n  }\n  .cs-tl-content p {\n    font-size: 0.85rem;\n    color: #475569;\n    margin: 0;\n  }\n\n  \/* \u2500\u2500 results: stat cards \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .cs-stats-grid {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 1rem;\n    margin: 1.2rem 0 1.8rem;\n  }\n  @media (max-width: 680px) {\n    .cs-stats-grid { grid-template-columns: 1fr; }\n  }\n  .cs-stat-card {\n    background: linear-gradient(135deg, #1e3a8a 0%, #2563eb 100%);\n    border-radius: 12px;\n    padding: 1.4rem 1.2rem;\n    text-align: center;\n    color: #fff;\n  }\n  .cs-stat-num {\n    display: block;\n    font-size: 2rem;\n    font-weight: 700;\n    line-height: 1.1;\n    margin-bottom: 0.4rem;\n  }\n  .cs-stat-lbl {\n    font-size: 0.8rem;\n    opacity: 0.88;\n    line-height: 1.4;\n  }\n\n  \/* \u2500\u2500 chart \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .cs-chart-wrap{ position: relative;\n    background: #f8fafc;\n    border: 1px solid #e2e8f0;\n    border-radius: 12px;\n    padding: 1.4rem 1.4rem 1rem;\n    margin: 0 0 2rem;\n  }\n  .cs-chart-title {\n    font-size: 0.85rem;\n    font-weight: 600;\n    color: #475569;\n    margin-bottom: 1rem;\n    text-align: center;\n  }\n  \/* \u2500\u2500 takeaway \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .cs-takeaway {\n    background: linear-gradient(135deg, #eff6ff 0%, #f0fdf4 100%);\n    border-left: 4px solid #2563eb;\n    border-radius: 0 12px 12px 0;\n    padding: 1.4rem 1.6rem;\n    margin: 2rem 0;\n  }\n  .cs-takeaway p {\n    font-size: 0.95rem;\n    font-weight: 500;\n    color: #1e3a8a;\n    margin: 0;\n    line-height: 1.7;\n  }\n\n  \/* \u2500\u2500 FAQ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  .cs-faq {\n    margin: 1.2rem 0 0;\n  }\n  .cs-faq-item {\n    border-bottom: 1px solid #e2e8f0;\n    padding: 1rem 0;\n  }\n  .cs-faq-item:last-child { border-bottom: none; }\n  .cs-faq-q {\n    font-size: 0.95rem;\n    font-weight: 700;\n    color: #0f172a;\n    margin: 0 0 0.45rem;\n  }\n  .cs-faq-a {\n    font-size: 0.87rem;\n    color: #475569;\n    margin: 0;\n    line-height: 1.65;\n  }\n<\/style>\n\n<div class=\"cs-body\">\n\n  <span class=\"cs-eyebrow\">Independent Pharmacy Chain<\/span>\n  <h1>How a 17-Outlet Pharmacy Chain Cut Expiry Write-Offs by 68%<\/h1>\n\n  <!-- Snapshot tiles -->\n  <div class=\"cs-snapshot\">\n    <div class=\"cs-snap-tile\">\n      <span class=\"cs-snap-val\">17<\/span>\n      <span class=\"cs-snap-label\">Retail outlets across the network<\/span>\n    <\/div>\n    <div class=\"cs-snap-tile\">\n      <span class=\"cs-snap-val\">Rs14L+<\/span>\n      <span class=\"cs-snap-label\">Annual procurement savings recovered<\/span>\n    <\/div>\n    <div class=\"cs-snap-tile\">\n      <span class=\"cs-snap-val\">11 days<\/span>\n      <span class=\"cs-snap-label\">Faster supplier credit reconciliation<\/span>\n    <\/div>\n    <div class=\"cs-snap-tile\">\n      <span class=\"cs-snap-val\">1 Qtr<\/span>\n      <span class=\"cs-snap-label\">Time to measurable results post go-live<\/span>\n    <\/div>\n  <\/div>\n\n  <!-- The Problem -->\n  <h2>The Problem<\/h2>\n  <p>Running 17 <a href=\"https:\/\/aaxonix.com\/industries\/retail\/\" class=\"sp-content-link\">pharmacy retail outlet operations<\/a> means managing thousands of active SKUs across Schedule H medications, OTC products, and nutritional lines, all with hard expiry dates and strict <a href=\"https:\/\/www.fssai.gov.in\/\" target=\"_blank\" rel=\"noopener noreferrer\">FSSAI<\/a> batch traceability requirements. The chain&#8217;s existing workflows were built for a single-store operation and had never been properly scaled.<\/p>\n  <p>Three interconnected problems were eating into margins every month.<\/p>\n\n  <div class=\"cs-problem-grid\">\n\n    <div class=\"cs-problem-card\">\n      <div class=\"cs-pc-icon\">\n        <!-- Feather: alert-triangle -->\n        <svg viewBox=\"0 0 24 24\"><polygon points=\"10.29 3.86 1.82 18 22.18 18 13.71 3.86 10.29 3.86\"><\/polygon><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"><\/line><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"><\/line><\/svg>\n      <\/div>\n      <h3>No Batch-Level Expiry Visibility<\/h3>\n      <p>Stock was counted by SKU, not by batch or expiry date. Near-expiry units sat undetected on shelves until physical verification, at which point the write-off was unavoidable.<\/p>\n    <\/div>\n\n    <div class=\"cs-problem-card\">\n      <div class=\"cs-pc-icon\">\n        <!-- Feather: file-minus -->\n        <svg viewBox=\"0 0 24 24\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"><\/path><polyline points=\"14 2 14 8 20 8\"><\/polyline><line x1=\"9\" y1=\"15\" x2=\"15\" y2=\"15\"><\/line><\/svg>\n      <\/div>\n      <h3>Unreconciled Supplier Credit Notes<\/h3>\n      <p>Distributors issued credit notes for short-dated returns, but manual matching against purchase invoices lagged by weeks. Some credits were never claimed at all, representing direct procurement losses.<\/p>\n    <\/div>\n\n    <div class=\"cs-problem-card\">\n      <div class=\"cs-pc-icon\">\n        <!-- Feather: shuffle -->\n        <svg viewBox=\"0 0 24 24\"><polyline points=\"16 3 21 3 21 8\"><\/polyline><line x1=\"4\" y1=\"20\" x2=\"21\" y2=\"3\"><\/line><polyline points=\"21 16 21 21 16 21\"><\/polyline><line x1=\"15\" y1=\"15\" x2=\"21\" y2=\"21\"><\/line><line x1=\"4\" y1=\"4\" x2=\"9\" y2=\"9\"><\/line><\/svg>\n      <\/div>\n      <h3>Fragmented Inter-Outlet Transfers<\/h3>\n      <p>When one outlet had slow-moving near-expiry stock and another had a stockout of the same molecule, there was no system to flag the mismatch. Both problems persisted side by side.<\/p>\n    <\/div>\n\n  <\/div>\n\n  <!-- Solution Stack -->\n  <h2>The Solution Stack<\/h2>\n  <p>Aaxonix implemented a three-product Zoho stack with the central design principle that every inventory movement, from goods receipt to inter-outlet transfer to return, had to carry batch and expiry metadata.<\/p>\n\n  <div class=\"cs-solution-stack\">\n\n    <div class=\"cs-sol-row\">\n      <div class=\"cs-sol-badge\">01<\/div>\n      <div class=\"cs-sol-body\">\n        <div class=\"cs-sol-product\">Zoho Inventory<\/div>\n        <div class=\"cs-sol-module\">Batch Tracking with FEFO Dispatch Rules<\/div>\n        <p>Every inward shipment is received against a batch number and expiry date at the time of GRN. FEFO (first-expiry, first-out) dispatch rules ensure older batches are allocated to sales orders before newer ones. A rolling 90-day near-expiry alert surfaces batches requiring action, either inter-outlet transfer or return initiation.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"cs-sol-row\">\n      <div class=\"cs-sol-badge\">02<\/div>\n      <div class=\"cs-sol-body\">\n        <div class=\"cs-sol-product\">Zoho Books<\/div>\n        <div class=\"cs-sol-module\">Supplier Debit Note Automation and GST Reconciliation<\/div>\n        <p>When a return shipment is raised in <a href=\"https:\/\/aaxonix.com\/products\/zoho-inventory\/\" class=\"sp-content-link\">Zoho Inventory batch tracking<\/a>, a linked debit note is auto-drafted in Zoho Books against the original purchase invoice. GST input credit on the original purchase is flagged for reversal or re-claim depending on the return type, keeping GSTR-2B reconciliation clean. Outstanding supplier credit notes are tracked on a live aging dashboard.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"cs-sol-row\">\n      <div class=\"cs-sol-badge\">03<\/div>\n      <div class=\"cs-sol-body\">\n        <div class=\"cs-sol-product\">Zoho Creator<\/div>\n        <div class=\"cs-sol-module\">Near-Expiry Action Workflow and Inter-Outlet Transfer Portal<\/div>\n        <p>A Creator app aggregates near-expiry alerts from all 17 outlets. Pharmacy managers log into a single view showing batch-level expiry dates, current stock at each location, and suggested transfer destinations. Transfer orders raised inside Creator push directly into Zoho Inventory, eliminating WhatsApp and phone-based coordination.<\/p>\n      <\/div>\n    <\/div>\n\n  <\/div>\n\n  <!-- Before vs After -->\n  <h2>Before vs After<\/h2>\n\n  <table class=\"cs-ba-table\">\n    <thead>\n      <tr>\n        <th>Area<\/th>\n        <th>Before Implementation<\/th>\n        <th>After Implementation<\/th>\n      <\/tr>\n    <\/thead>\n    <tbody>\n      <tr>\n        <td>Expiry tracking<\/td>\n        <td class=\"cs-ba-before\">SKU-level only, no batch dates in system<\/td>\n        <td class=\"cs-ba-after\">Batch, lot, and expiry date on every inward GRN<\/td>\n      <\/tr>\n      <tr>\n        <td>Near-expiry alerts<\/td>\n        <td class=\"cs-ba-before\">Manual monthly physical check per outlet<\/td>\n        <td class=\"cs-ba-after\">Rolling 90-day automated alert across all 17 outlets<\/td>\n      <\/tr>\n      <tr>\n        <td>Dispatch logic<\/td>\n        <td class=\"cs-ba-before\">FIFO by receipt date, no expiry consideration<\/td>\n        <td class=\"cs-ba-after\">FEFO enforced at pick time via Zoho Inventory rules<\/td>\n      <\/tr>\n      <tr>\n        <td>Supplier credit reconciliation<\/td>\n        <td class=\"cs-ba-before\">Manual spreadsheet matching, 2 to 3 week lag<\/td>\n        <td class=\"cs-ba-after\">Auto-drafted debit notes, reconciled within 2 to 3 days<\/td>\n      <\/tr>\n      <tr>\n        <td>Inter-outlet transfers<\/td>\n        <td class=\"cs-ba-before\">Coordinated over phone and WhatsApp, no system record<\/td>\n        <td class=\"cs-ba-after\">Creator portal raises transfer order directly in Zoho Inventory<\/td>\n      <\/tr>\n      <tr>\n        <td>GST input on returns<\/td>\n        <td class=\"cs-ba-before\">Handled ad-hoc, frequent mismatches in GSTR-2B<\/td>\n        <td class=\"cs-ba-after\">Auto-flagged for reversal or re-claim on each debit note<\/td>\n      <\/tr>\n      <tr>\n        <td>Expiry write-off value<\/td>\n        <td class=\"cs-ba-before\">Estimated Rs20L to Rs22L per year<\/td>\n        <td class=\"cs-ba-after\">Reduced to approximately Rs7L per year (68% drop)<\/td>\n      <\/tr>\n    <\/tbody>\n  <\/table>\n\n  <!-- Implementation Phases -->\n  <h2>Implementation Phases<\/h2>\n\n  <div class=\"cs-timeline\">\n\n    <div class=\"cs-tl-item\">\n      <div class=\"cs-tl-badge\">1<\/div>\n      <div class=\"cs-tl-content\">\n        <div class=\"cs-tl-title\">Discovery and Data Audit<\/div>\n        <div class=\"cs-tl-dur\">Weeks 1 to 2<\/div>\n        <p>Mapped all 17 outlet workflows, catalogued SKU master data, and audited the last 12 months of supplier credit notes to quantify unrecovered procurement losses. Identified 340 SKUs across Schedule H and FSSAI-regulated categories requiring mandatory batch traceability.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"cs-tl-item\">\n      <div class=\"cs-tl-badge\">2<\/div>\n      <div class=\"cs-tl-content\">\n        <div class=\"cs-tl-title\">Zoho Inventory Configuration and Batch Master Setup<\/div>\n        <div class=\"cs-tl-dur\">Weeks 3 to 5<\/div>\n        <p>Enabled batch tracking for all 340 regulated SKUs. Configured FEFO dispatch rules, GRN templates with mandatory batch and expiry fields, and multi-warehouse locations representing each outlet. Migrated opening stock with batch data for the current live inventory.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"cs-tl-item\">\n      <div class=\"cs-tl-badge\">3<\/div>\n      <div class=\"cs-tl-content\">\n        <div class=\"cs-tl-title\">Zoho Books Integration and Debit Note Workflow<\/div>\n        <div class=\"cs-tl-dur\">Weeks 5 to 7<\/div>\n        <p>Connected Zoho Inventory returns to <a href=\"https:\/\/aaxonix.com\/products\/zoho-books\/\" class=\"sp-content-link\">Zoho Books supplier reconciliation<\/a> debit note drafts via webhook. Built supplier aging dashboard and GST input flag logic. Reconciled the backlog of outstanding credit notes from the previous 6 months during this phase.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"cs-tl-item\">\n      <div class=\"cs-tl-badge\">4<\/div>\n      <div class=\"cs-tl-content\">\n        <div class=\"cs-tl-title\">Zoho Creator Portal Build and UAT<\/div>\n        <div class=\"cs-tl-dur\">Weeks 7 to 10<\/div>\n        <p>Built the near-expiry action portal in <a href=\"https:\/\/aaxonix.com\/products\/zoho-creator\/\" class=\"sp-content-link\">Zoho Creator workflow apps<\/a>. UAT conducted with pharmacists from 4 pilot outlets. Feedback loops refined the transfer suggestion logic and the mobile view for outlet-level managers. Parallel-run period with existing WhatsApp workflow to validate accuracy.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"cs-tl-item\">\n      <div class=\"cs-tl-badge\">5<\/div>\n      <div class=\"cs-tl-content\">\n        <div class=\"cs-tl-title\">Full Chain Rollout and Training<\/div>\n        <div class=\"cs-tl-dur\">Weeks 10 to 13<\/div>\n        <p>Rolled out to all 17 outlets in two waves. Conducted on-site training at each location covering GRN entry, near-expiry alert response, and transfer order creation. Hypercare support for 30 days post go-live.<\/p>\n      <\/div>\n    <\/div>\n\n  <\/div>\n\n  <!-- Results -->\n  <h2>Results After One Quarter<\/h2>\n\n  <div class=\"cs-stats-grid\">\n    <div class=\"cs-stat-card\">\n      <span class=\"cs-stat-num\" data-countup data-target=\"68\" data-suffix=\"%\">68%<\/span>\n      <span class=\"cs-stat-lbl\">Drop in near-expiry write-offs<\/span>\n    <\/div>\n    <div class=\"cs-stat-card\">\n      <span class=\"cs-stat-num\" data-countup data-target=\"11\" data-suffix=\" days\">11 days<\/span>\n      <span class=\"cs-stat-lbl\">Faster supplier credit reconciliation<\/span>\n    <\/div>\n    <div class=\"cs-stat-card\">\n      <span class=\"cs-stat-num\">Rs14L<\/span>\n      <span class=\"cs-stat-lbl\">Annual procurement savings recovered<\/span>\n    <\/div>\n  <\/div>\n\n  <div class=\"cs-chart-wrap\">\n    <div class=\"cs-chart-title\">Monthly Near-Expiry Write-Off Value (Rs Lakhs) ,  6 Months Pre vs 6 Months Post<\/div>\n    <canvas id=\"csWriteOffChart\" height=\"200\"><\/canvas>\n  <\/div>\n\n  <!-- Takeaway -->\n  <div class=\"cs-takeaway\">\n    <p>For a pharmacy chain at this scale, expiry write-offs and unclaimed supplier credits are not an operations problem. They are a data problem. The moment batch-level expiry data existed in a structured system and every return triggered an automated financial workflow, the losses became visible, actionable, and stoppable. The technology investment paid back within the first quarter.<\/p>\n  <\/div>\n\n  <!-- FAQ -->\n  <h2>Frequently Asked Questions<\/h2>\n\n  <div class=\"cs-faq\">\n\n    <div class=\"cs-faq-item\">\n      <p class=\"cs-faq-q\">Does Zoho Inventory support batch tracking for Schedule H and Schedule H1 drugs specifically?<\/p>\n      <p class=\"cs-faq-a\">Yes. Zoho Inventory&#8217;s batch tracking feature is product-category agnostic. You configure which SKUs require batch and expiry capture at the item level. For Schedule H and H1 drugs, you can make both fields mandatory on the GRN form, ensuring no inward shipment is received without full traceability data. This satisfies standard CDSCO and FSSAI batch record requirements for retail pharmacy.<\/p>\n    <\/div>\n\n    <div class=\"cs-faq-item\">\n      <p class=\"cs-faq-q\">How does the automated debit note workflow handle partial credit notes from distributors?<\/p>\n      <p class=\"cs-faq-a\">When a return shipment is raised for a subset of a purchase invoice, the Zoho Books integration creates a debit note referencing only the returned line items and quantities. GST input reversal is calculated proportionally. The outstanding balance on the original purchase invoice is updated automatically, and the supplier aging dashboard shows the net amount still pending credit from that distributor.<\/p>\n    <\/div>\n\n    <div class=\"cs-faq-item\">\n      <p class=\"cs-faq-q\">Can inter-outlet transfers be tracked for GST purposes, given that outlets may be in the same GSTIN or different GSTINs?<\/p>\n      <p class=\"cs-faq-a\">This is handled at the configuration stage. Outlets under a single GSTIN are set up as internal warehouses in Zoho Inventory, so inter-outlet transfers are stock movements with no GST implication. If any outlets operate under separate GSTINs, those are configured as distinct organisations with a branch transfer workflow that raises a delivery challan and tax invoice as required under GST rules for stock transfers between distinct persons.<\/p>\n    <\/div>\n\n    <div class=\"cs-faq-item\">\n      <p class=\"cs-faq-q\">What is the typical implementation timeline for a pharmacy chain of this size?<\/p>\n      <p class=\"cs-faq-a\">For a 15 to 20 outlet independent pharmacy chain, the full implementation including data migration, Zoho Inventory configuration, Zoho Books integration, and the Creator near-expiry portal runs approximately 10 to 13 weeks from discovery to go-live. A phased rollout across outlet batches, rather than a single cutover, reduces operational risk and allows training to be absorbed more effectively at store level.<\/p>\n    <\/div>\n\n  <\/div>\n\n<\/div>\n\n<script>\n(function () {\n\/* self-load libs if cache stripped head CDNs *\/\n  ['https:\/\/cdn.jsdelivr.net\/npm\/chart.js','https:\/\/cdn.jsdelivr.net\/npm\/countup.js@2\/dist\/countUp.umd.min.js'].forEach(function(u){if(!document.querySelector('script[src=\"'+u+'\"]')){var s=document.createElement('script');s.src=u;document.head.appendChild(s);}});\n    \/* \u2500\u2500 CountUp \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  function animateCount(el) {\n    var target = parseFloat(el.getAttribute('data-target'));\n    var suffix = el.getAttribute('data-suffix') || '';\n    var duration = 1800;\n    var start = null;\n    function step(ts) {\n      if (!start) start = ts;\n      var progress = Math.min((ts - start) \/ duration, 1);\n      var ease = 1 - Math.pow(1 - progress, 3);\n      var val = Math.round(ease * target);\n      el.textContent = val + suffix;\n      if (progress < 1) requestAnimationFrame(step);\n    }\n    requestAnimationFrame(step);\n  }\n\n  var io = new IntersectionObserver(function (entries) {\n    entries.forEach(function (entry) {\n      if (entry.isIntersecting) {\n        animateCount(entry.target);\n        io.unobserve(entry.target);\n      }\n    });\n  }, { threshold: 0.4 });\n\n  document.querySelectorAll('[data-countup]').forEach(function (el) {\n    io.observe(el);\n  });\n\n  \/* \u2500\u2500 Chart.js: write-off bar chart \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  function loadChart() {\n    if (typeof Chart === 'undefined') {\n      var s = document.createElement('script');\n      s.src = 'https:\/\/cdn.jsdelivr.net\/npm\/chart.js@4.4.2\/dist\/chart.umd.min.js';\n      s.onload = buildChart;\n      document.head.appendChild(s);\n    } else {\n      buildChart();\n    }\n  }\n\n  function buildChart() {\n    var ctx = document.getElementById('csWriteOffChart');\n    if (!ctx) return;\n    new Chart(ctx, {\n      type: 'bar',\n      data: {\n        labels: ['Mo -6', 'Mo -5', 'Mo -4', 'Mo -3', 'Mo -2', 'Mo -1', 'Mo +1', 'Mo +2', 'Mo +3', 'Mo +4', 'Mo +5', 'Mo +6'],\n        datasets: [\n          {\n            label: 'Write-Off Value (Rs L)',\n            data: [1.9, 2.1, 1.8, 2.3, 2.0, 1.7, 1.1, 0.9, 0.8, 0.7, 0.6, 0.6],\n            backgroundColor: [\n              '#ef4444','#ef4444','#ef4444','#ef4444','#ef4444','#ef4444',\n              '#22c55e','#22c55e','#22c55e','#22c55e','#22c55e','#22c55e'\n            ],\n            borderRadius: 5,\n            borderSkipped: false\n          }\n        ]\n      },\n      options: {\n        responsive: true,\n        plugins: {\n          legend: { display: false },\n          tooltip: {\n            callbacks: {\n              label: function (ctx) {\n                return 'Rs ' + ctx.parsed.y.toFixed(1) + 'L';\n              }\n            }\n          },\n          annotation: {}\n        },\n        scales: {\n          x: {\n            grid: { display: false },\n            ticks: { font: { size: 11 } }\n          },\n          y: {\n            beginAtZero: true,\n            ticks: {\n              callback: function (v) { return 'Rs ' + v + 'L'; },\n              font: { size: 11 }\n            },\n            grid: { color: '#e2e8f0' }\n          }\n        }\n      }\n    });\n  }\n\n  var chartObs = new IntersectionObserver(function (entries) {\n    entries.forEach(function (e) {\n      if (e.isIntersecting) { loadChart(); chartObs.unobserve(e.target); }\n    });\n  }, { threshold: 0.2 });\n\n  var wrap = document.querySelector('.cs-chart-wrap');\n  if (wrap) chartObs.observe(wrap);\n})();\n<\/script>","protected":false},"excerpt":{"rendered":"<p>A 17-outlet pharmacy chain cut near-expiry write-offs by 68% and recovered Rs14L in procurement savings using Zoho Inventory batch tracking and automated&#8230;<\/p>\n","protected":false},"featured_media":2351,"template":"","meta":{"cs_card_title":"How a 17-Outlet Pharmacy Chain Cut Expiry Write-Offs by 68%","cs_result_num":"68%","cs_result_label":"Near-expiry write-offs cut","cs_stat2_num":"11 days","cs_stat2_label":"Faster supplier credit reconciliation","cs_stat3_num":"Rs14L","cs_stat3_label":"Procurement savings recovered","cs_challenge":"A 17-outlet pharmacy chain lost lakhs yearly to expired stock and unreconciled supplier credit notes.","cs_solution":"Zoho Inventory with expiry-batch tracking and automated supplier debit-note workflows.","cs_tools":"Zoho Inventory, Zoho Books, Zoho Creator"},"cs_industry":[435],"class_list":["post-2352","case_study","type-case_study","status-publish","has-post-thumbnail","hentry","cs_industry-retail"],"_links":{"self":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/case_study\/2352","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/case_study"}],"about":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/types\/case_study"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/media\/2351"}],"wp:attachment":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/media?parent=2352"}],"wp:term":[{"taxonomy":"cs_industry","embeddable":true,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/cs_industry?post=2352"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}