chore: Added .md file to explain stock ageing business logic
This commit is contained in:
parent
878fd377c2
commit
c007f84ade
@ -395,8 +395,7 @@ class FIFOSlots:
|
|||||||
|
|
||||||
warehouse_results = (
|
warehouse_results = (
|
||||||
frappe.qb.from_(warehouse)
|
frappe.qb.from_(warehouse)
|
||||||
.select("name")
|
.select("name").where(
|
||||||
.where(
|
|
||||||
(warehouse.lft >= lft)
|
(warehouse.lft >= lft)
|
||||||
& (warehouse.rgt <= rgt)
|
& (warehouse.rgt <= rgt)
|
||||||
).run()
|
).run()
|
||||||
|
|||||||
73
erpnext/stock/report/stock_ageing/stock_ageing_fifo_logic.md
Normal file
73
erpnext/stock/report/stock_ageing/stock_ageing_fifo_logic.md
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
### Concept of FIFO Slots
|
||||||
|
|
||||||
|
Since we need to know age-wise remaining stock, we maintain all the inward entries as slots. So each time stock comes in, a slot is added for the same.
|
||||||
|
|
||||||
|
Eg. For Item A:
|
||||||
|
----------------------
|
||||||
|
Date | Qty | Queue
|
||||||
|
----------------------
|
||||||
|
1st | +50 | [[50, 1-12-2021]]
|
||||||
|
2nd | +20 | [[50, 1-12-2021], [20, 2-12-2021]]
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Now the queue can tell us the total stock and also how old the stock is.
|
||||||
|
Here, the balance qty is 70.
|
||||||
|
50 qty is (today-the 1st) days old
|
||||||
|
20 qty is (today-the 2nd) days old
|
||||||
|
|
||||||
|
### Calculation of FIFO Slots
|
||||||
|
|
||||||
|
#### Case 1: Outward from sufficient balance qty
|
||||||
|
----------------------
|
||||||
|
Date | Qty | Queue
|
||||||
|
----------------------
|
||||||
|
1st | +50 | [[50, 1-12-2021]]
|
||||||
|
2nd | -20 | [[30, 1-12-2021]]
|
||||||
|
2nd | +20 | [[30, 1-12-2021], [20, 2-12-2021]]
|
||||||
|
|
||||||
|
Here after the first entry, while issuing 20 qty:
|
||||||
|
- **since 20 is lesser than the balance**, **qty_to_pop (20)** is simply consumed from first slot (FIFO consumption)
|
||||||
|
- Any inward entry after as usual will get its own slot added to the queue
|
||||||
|
|
||||||
|
#### Case 2: Outward from sufficient cumulative (slots) balance qty
|
||||||
|
----------------------
|
||||||
|
Date | Qty | Queue
|
||||||
|
----------------------
|
||||||
|
1st | +50 | [[50, 1-12-2021]]
|
||||||
|
2nd | +20 | [[50, 1-12-2021], [20, 2-12-2021]]
|
||||||
|
2nd | -60 | [[10, 2-12-2021]]
|
||||||
|
|
||||||
|
- Consumption happens slot wise. First slot 1 is consumed
|
||||||
|
- Since **qty_to_pop (60) is greater than slot 1 qty (50)**, the entire slot is consumed and popped
|
||||||
|
- Now the queue is [[20, 2-12-2021]], and **qty_to_pop=10** (remaining qty to pop)
|
||||||
|
- It then goes ahead to the next slot and consumes 10 from it
|
||||||
|
- Now the queue is [[10, 2-12-2021]]
|
||||||
|
|
||||||
|
#### Case 3: Outward from insufficient balance qty
|
||||||
|
> This case is possible only if **Allow Negative Stock** was enabled at some point/is enabled.
|
||||||
|
|
||||||
|
----------------------
|
||||||
|
Date | Qty | Queue
|
||||||
|
----------------------
|
||||||
|
1st | +50 | [[50, 1-12-2021]]
|
||||||
|
2nd | -60 | [[-10, 1-12-2021]]
|
||||||
|
|
||||||
|
- Since **qty_to_pop (60)** is more than the balance in slot 1, the entire slot is consumed and popped
|
||||||
|
- Now the queue is **empty**, and **qty_to_pop=10** (remaining qty to pop)
|
||||||
|
- Since we still have more to consume, we append the balance since 60 is issued from 50 i.e. -10.
|
||||||
|
- We register this negative value, since the stock issue has caused the balance to become negative
|
||||||
|
|
||||||
|
Now when stock is inwarded:
|
||||||
|
- Instead of adding a slot we check if there are any negative balances.
|
||||||
|
- If yes, we keep adding positive stock to it until we make the balance positive.
|
||||||
|
- Once the balance is positive, the next inward entry will add a new slot in the queue
|
||||||
|
|
||||||
|
Eg:
|
||||||
|
----------------------
|
||||||
|
Date | Qty | Queue
|
||||||
|
----------------------
|
||||||
|
1st | +50 | [[50, 1-12-2021]]
|
||||||
|
2nd | -60 | [[-10, 1-12-2021]]
|
||||||
|
3rd | +5 | [[-5, 3-12-2021]]
|
||||||
|
4th | +10 | [[5, 4-12-2021]]
|
||||||
|
4th | +20 | [[5, 4-12-2021], [20, 4-12-2021]]
|
||||||
Loading…
x
Reference in New Issue
Block a user