<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SmartDukaan &#x2013; //trunk/profitmandi-fofo/src/main/java/com/</title><description>WebSVN RSS feed &#x2013; SmartDukaan</description><lastBuildDate>Tue, 15 Sep 2026 01:09:30 +0530</lastBuildDate><generator>WebSVN 2.8.6-DEV</generator><language>en</language><link>https://svn.smartdukaan.com/log.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;max=40&amp;</link><atom:link href="https://svn.smartdukaan.com/rss.php?isdir=1&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Mon, 14 Sep 2026 17:10:46 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37623 – feat(price-drop): auto-approve price drop DP/MOP into external vendor catalog pricing ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(price-drop): auto-approve price drop DP/MOP into external vendor catalog pricing&lt;br /&gt;
&lt;br /&gt;
- PriceDropController calls VendorCatalogPricingService.applyPriceDrop with the affected date and logged-in user&lt;br /&gt;
- BillingPricingServiceTest: local-DB integration tests (rolled back) for origin-based billing prices, catalog fallback and re-billed orders&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PriceDropController.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/service/warehouse/BillingPricingServiceTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37623</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37623</guid></item>
<item><pubDate>Mon, 14 Sep 2026 17:08:58 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37620 – Offer creation suggests only active models unless asked for all ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Offer creation suggests only active models unless asked for all&lt;br /&gt;
&lt;br /&gt;
/entity accepted activeOnly but always searched with false, so the offer&lt;br /&gt;
screen&apos;s model picker listed every catalog of the brand, delisted ones included.&lt;br /&gt;
It now honours the flag. The default becomes false so the pages that never pass&lt;br /&gt;
it keep their current results; the notification product search, which already&lt;br /&gt;
asked for active-only, now gets it.&lt;br /&gt;
&lt;br /&gt;
Each item-criteria block gets an Include inactive checkbox, off by default.&lt;br /&gt;
Ticking Exclude ticks it too: a brand-level offer still pays on delisted models&lt;br /&gt;
partners hold stock of, and they cannot be excluded if they cannot be picked.&lt;br /&gt;
Inactive models are labelled, and reloading the list keeps picks still present.&lt;br /&gt;
&lt;br /&gt;
The reload flag is now per block; the old global one let a brand change in one&lt;br /&gt;
block be consumed by opening another, leaving the first with a stale list.&lt;br /&gt;
Brand names are URL-encoded so a brand like Ai+ is not sent as &apos;Ai &apos;.&lt;br /&gt;
&lt;br /&gt;
Requires profitmandi-common r37619 for the inactive label.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ContentController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/scheme_offer.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/scheme_offer.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37620</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37620</guid></item>
<item><pubDate>Sat, 12 Sep 2026 17:00:50 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37604 – Show the derived movement price when building an internal purchase ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Show the derived movement price when building an internal purchase order&lt;br /&gt;
&lt;br /&gt;
Both places a price reaches a purchase order now use the movement price for internal&lt;br /&gt;
suppliers: the single lookup as an item is added on screen, and the per-item resolution&lt;br /&gt;
behind a bulk upload, which does the whole file in one pass instead of loading a circular&lt;br /&gt;
the sending warehouse does not have.&lt;br /&gt;
&lt;br /&gt;
Removes addVendorPricingIfMissing, which fired only when someone typed a numeric item id&lt;br /&gt;
into the search box, and only for Samsung or non-handsets, writing permanent approved&lt;br /&gt;
pricing rows onto the internal supplier from a hardcoded source vendor. Bulk upload never&lt;br /&gt;
called it at all, which is why the same item could be added on screen but rejected in a&lt;br /&gt;
file.&lt;br /&gt;
&lt;br /&gt;
Tests cover what is decided once origins are known - drawing the oldest stock first,&lt;br /&gt;
refusing a quantity that spans two original vendors while naming how many can move and&lt;br /&gt;
asking for a separate order, refusing an unmapped supplier, and falling back to the catalog&lt;br /&gt;
without ever recording an inferred vendor as though it were known.&lt;br /&gt;
&lt;br /&gt;
Requires profitmandi-dao r37603.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/VendorController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/warehouse/PurchaseOrderController.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/service/warehouse&lt;br /&gt;+ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingServiceTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37604</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37604</guid></item>
<item><pubDate>Fri, 11 Sep 2026 19:43:21 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37596 – Mirror the gateway sanction when a hard limit is released ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Mirror the gateway sanction when a hard limit is released&lt;br /&gt;
&lt;br /&gt;
/resetHardLimit set hard_limit=false and reverted credit_limit to suggested_limit&lt;br /&gt;
but never touched dtr.credit_account, so the SIDBI/SDDIRECT gateway kept the old&lt;br /&gt;
pinned sanction until some later full limit pass rewrote it. Releasing a hard&lt;br /&gt;
limit can move the number a long way - RJAMR501 Inder Mobile is pinned at 800,000&lt;br /&gt;
against a suggested 909,114, so the gateway would under-report him by 109,114.&lt;br /&gt;
&lt;br /&gt;
This was previously masked rather than absent: the 20-minute pass rewrote ~220&lt;br /&gt;
partners every run because float noise made almost every comparison look like a&lt;br /&gt;
change, which repaired the mirror by accident. Rounding that comparison to paise&lt;br /&gt;
(r37589) removed the accidental repair and moving the full pass to daily (r37595)&lt;br /&gt;
stretched the window to most of a day, so the gap is now worth closing properly.&lt;br /&gt;
&lt;br /&gt;
Mirrors sanctioned/available in the same request, matching what&lt;br /&gt;
/creditRequirement already does, and stamps update_timestamp so the change is&lt;br /&gt;
visible as a real limit movement.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/SDCreditController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37596</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37596</guid></item>
<item><pubDate>Fri, 11 Sep 2026 19:19:53 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37593 – Show partners their aged Apple stock and why it lowers ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;Show partners their aged Apple stock and why it lowers their credit limit&lt;br /&gt;
&lt;br /&gt;
Apple handsets held past 30 days are deducted when the credit limit is&lt;br /&gt;
calculated, but nothing told the partner - they saw a limit drop with no&lt;br /&gt;
explanation. Adds a dashboard banner alongside the existing &apos;activated but not&lt;br /&gt;
billed&apos; one, shown only when the partner actually has such stock (70 of 980&lt;br /&gt;
today), with the unit count, the value, and View Imeis for the detail.&lt;br /&gt;
&lt;br /&gt;
- dashboard-aged-apple-stock.vm, parsed in dashboard1.vm under&lt;br /&gt;
  #if($investments.aged_apple_qty &gt; 0)&lt;br /&gt;
- count and value both read from the maintained partner_investment snapshot, so&lt;br /&gt;
  the banner never runs its own query and always matches the amount the limit is&lt;br /&gt;
  actually reduced by&lt;br /&gt;
- amount wrapped in &amp;lt;span class=&quot;currency&quot;&gt; so common.js formatCurrency() renders&lt;br /&gt;
  it instead of a raw float&lt;br /&gt;
- /agedAppleImeis + aged-apple-imeis.vm list the units, excluding activated ones -&lt;br /&gt;
  those are already deducted as activated stock and shown in their own banner, so&lt;br /&gt;
  no handset appears in both&lt;br /&gt;
- click handler added to the existing activated-imeis.js rather than inline in the&lt;br /&gt;
  fragment: an inline script in an AJAX-injected fragment re-registers&lt;br /&gt;
  $(document).on on every load and stacks duplicate requests&lt;br /&gt;
- jsVersion 420 -&gt; 421&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/DashboardController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/InventoryController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/business/activated-imeis.js&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/aged-apple-imeis.vm&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/dashboard-aged-apple-stock.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/dashboard1.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37593</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37593</guid></item>
<item><pubDate>Fri, 11 Sep 2026 17:30:12 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37590 – Route admin wallet adjustment through WalletServiceImpl  /walletUpdate hand-rolled the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Route admin wallet adjustment through WalletServiceImpl&lt;br /&gt;
&lt;br /&gt;
/walletUpdate hand-rolled the balance update and history row, bypassing the&lt;br /&gt;
service entirely, and read the wallet with selectByRetailerId instead of&lt;br /&gt;
selectByRetailerIdForUpdate - so unlike every other wallet path it took no row&lt;br /&gt;
lock, and a concurrent adjustment and purchase could lose an update.&lt;br /&gt;
&lt;br /&gt;
Now calls walletService.applyManualAdjustment, which reuses getManualReference&lt;br /&gt;
for the reference allocation and routes the movement through&lt;br /&gt;
addAmountToWallet/consumeAmountFromWallet(forced). Behaviour is preserved: admin&lt;br /&gt;
debits stay forced, so they can still push a wallet negative as before. Removes&lt;br /&gt;
~45 duplicated lines.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/WalletController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37590</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37590</guid></item>
<item><pubDate>Fri, 11 Sep 2026 15:48:56 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37586 – drr view modification</title><description>&lt;div&gt;&lt;strong&gt;ranu – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;drr view modification&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/RbmDrrDashboardController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/rbm-drr-dashboard.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/retailer-details.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37586</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37586</guid></item>
<item><pubDate>Thu, 10 Sep 2026 14:55:17 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37580 – web offer: state an EMI scheme the circular gave without ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;web offer: state an EMI scheme the circular gave without months&lt;br /&gt;
&lt;br /&gt;
  Rs.2,500 on Credit Card EMI (CIB) with IDFC First Bank, Kotak Mahindra Bank&lt;br /&gt;
&lt;br /&gt;
52 Sep&apos;26 offers have a bare &apos;CIB&apos; tenure cell - the circular names the EMI type and&lt;br /&gt;
gives no months. TenureParser correctly yields no tenure row for a cell with no digits,&lt;br /&gt;
so the type vanished and the badge said only &apos;on Credit Card EMI&apos;. Every one of those&lt;br /&gt;
52 carries a cashback, so it was 52 offers&apos; worth of SKUs silent about the EMI they&lt;br /&gt;
apply to.&lt;br /&gt;
&lt;br /&gt;
The type is stated because the circular stated it. The MONTHS are not invented,&lt;br /&gt;
because it did not give them - the same line the CIB expansion was left on.&lt;br /&gt;
&lt;br /&gt;
Read from offer_raw_row.col_emi_tenure rather than stored: &apos;scheme, no month&apos; is not a&lt;br /&gt;
tenure, and offer_tenure.tenure_months is NOT NULL, so persisting it would mean a fake&lt;br /&gt;
0 row standing for a fact that is not a tenure.&lt;br /&gt;
&lt;br /&gt;
Only ever attached to an EMI mode, and real tenures always win over the bare code.&lt;br /&gt;
&lt;br /&gt;
ModelOfferTest 8 -&gt; 11.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/WebOfferSyncRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/WebOfferSyncService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/ModelOfferTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37580</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37580</guid></item>
<item><pubDate>Thu, 10 Sep 2026 13:47:02 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37579 – web offer: one badge per model, consolidating everything the circular ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;web offer: one badge per model, consolidating everything the circular grants it&lt;br /&gt;
&lt;br /&gt;
Edge 60 Pro 12+256 carried five badges - a Full Swipe cashback, an EMI cashback and&lt;br /&gt;
three EMI schemes - and the partner&apos;s card listed all five. It now carries one:&lt;br /&gt;
&lt;br /&gt;
  SEPTEMBER 2026 Motorola Cashback Offer-2,500 On Credit Card EMI&lt;br /&gt;
                                         &amp; 2,000 On Credit Card Full Swipe&lt;br /&gt;
&lt;br /&gt;
Models whose consolidated terms are IDENTICAL share a badge, so 314 models collapse to&lt;br /&gt;
~107 rows while every model still appears in exactly one.&lt;br /&gt;
&lt;br /&gt;
Rules, from the taxonomy: any model has cashback on Full Swipe and/or EMI, instant or&lt;br /&gt;
deferred, plus NCE/LCE/CIB with tenures, and any of it may differ per bank.&lt;br /&gt;
- &apos;Upto&apos; only where a mode carries several values - which is what per-bank pricing&lt;br /&gt;
  looks like. One value is stated plainly.&lt;br /&gt;
- Highest value first.&lt;br /&gt;
- Banks ride with each line only when they DIFFER; one shared set is hoisted to a&lt;br /&gt;
  single trailing &apos;Banks:&apos; line. A third of models need the per-line form.&lt;br /&gt;
- An amount whose window is narrower than the badge&apos;s states its own end date. Apple&lt;br /&gt;
  1025780 pays Rs.6,000 to the 16th then Rs.4,000 to the 26th; without this the badge&lt;br /&gt;
  would advertise Rs.6,000 for ten days it is not available.&lt;br /&gt;
&lt;br /&gt;
⚠️ Banks and tenures belong to the OFFER a line came from, never to the model. On Edge&lt;br /&gt;
60 Pro the no-cost EMI is ICICI on 3 and 6 months but SBI on 3 only, and the EMI&lt;br /&gt;
cashback is IDFC/Kotak with no tenure at all. Attaching the model&apos;s tenures to its&lt;br /&gt;
cashback would promise no-cost EMI on a bank that never offered it. This also corrects&lt;br /&gt;
an earlier reading of mine that called the SBI 3-month line a duplicate of ICICI&apos;s -&lt;br /&gt;
it is a different bank, not noise.&lt;br /&gt;
&lt;br /&gt;
New ModelOfferTest, 8 cases, every one taken from a real Sep&apos;26 row.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/WebOfferSyncService.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/ModelOfferTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37579</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37579</guid></item>
<item><pubDate>Thu, 10 Sep 2026 13:17:50 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37577 – web offer: an EMI cashback names its tenures WITH their ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;web offer: an EMI cashback names its tenures WITH their scheme&lt;br /&gt;
&lt;br /&gt;
  Rs.2,500 on Credit Card EMI (NCE 3, 6; LCE 9, 12 months)&lt;br /&gt;
&lt;br /&gt;
A bare &apos;3, 6, 9, 12 months&apos; says which tenures earn the cashback but not which of&lt;br /&gt;
them are no-cost - and at the counter the two facts are only useful together.&lt;br /&gt;
&lt;br /&gt;
The trailing scheme sentence is dropped when an EMI benefit already carried it, since&lt;br /&gt;
it would state the same thing twice. It stays when the cashback is on Full Swipe only:&lt;br /&gt;
EMI is still available, it just is not what the cashback is on.&lt;br /&gt;
&lt;br /&gt;
Tenures whose scheme the circular never gave keep their months but carry no label -&lt;br /&gt;
the months are real, the scheme would be invented.&lt;br /&gt;
&lt;br /&gt;
Tests 16 -&gt; 18.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/WebOfferSyncService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/WebOfferSyncServiceTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37577</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37577</guid></item>
<item><pubDate>Thu, 10 Sep 2026 12:45:42 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37574 – web offer: print the EMI scheme code, not a guessed ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;web offer: print the EMI scheme code, not a guessed expansion&lt;br /&gt;
&lt;br /&gt;
NCE / LCE / CIB are industry standard and now appear verbatim:&lt;br /&gt;
&lt;br /&gt;
  Instant cashback. Rs.3,000 on Credit Card EMI (3, 6 months);&lt;br /&gt;
  Rs.3,000 on Credit Card Full Swipe. LCE on 3, 6 months. Banks: ...&lt;br /&gt;
&lt;br /&gt;
The expansions were not ours to invent. emi_scheme.display_name carries &apos;Cashback&lt;br /&gt;
Instant Benefit&apos; for CIB, and the evidence contradicts it: the Sep&apos;26 cell&lt;br /&gt;
&apos;3 NC 6,9,12 CIB&apos; puts CIB in ONE ladder with NCE, so it describes who bears the&lt;br /&gt;
interest on a tenure rather than how a cashback is delivered - and 53 of 55 CIB rows&lt;br /&gt;
carry a separate cashback amount anyway, which that expansion would make redundant.&lt;br /&gt;
Pine Labs&apos; own docs define ICB as Instant Cashback on UPI; the circular writes CIB 60&lt;br /&gt;
times and ICB never.&lt;br /&gt;
&lt;br /&gt;
A guessed expansion on a partner badge risks stating the opposite of the truth - for&lt;br /&gt;
CIB, advertising a benefit where the customer may in fact be bearing the interest.&lt;br /&gt;
The code cannot be wrong that way.&lt;br /&gt;
&lt;br /&gt;
A scheme is still stated ONLY when the circular gave one; tenures with no scheme are&lt;br /&gt;
described as nothing at all.&lt;br /&gt;
&lt;br /&gt;
Also fixes the singular: &apos;NCE on 3 month&apos;, not &apos;3 months&apos;.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/WebOfferSyncService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/WebOfferSyncServiceTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37574</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37574</guid></item>
<item><pubDate>Thu, 10 Sep 2026 12:34:31 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37572 – web offer: state the whole offer in the title, and ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;web offer: state the whole offer in the title, and the EMI scheme in the detail&lt;br /&gt;
&lt;br /&gt;
Title now states EVERY payment mode, highest first, in the house style of the&lt;br /&gt;
hand-written rows:&lt;br /&gt;
&lt;br /&gt;
  SEPTEMBER 2026 Samsung Cashback Offer-3000 On Credit Card Full Swipe&lt;br /&gt;
                                        &amp; 3000 On Credit Card EMI &amp; 3000 On UPI&lt;br /&gt;
&lt;br /&gt;
A partner scanning the card should see the whole offer, not just its best number.&lt;br /&gt;
Brand keeps its catalog casing (Samsung, not SAMSUNG). A scheme-only offer is still&lt;br /&gt;
titled by its scheme - calling it a cashback offer is what produced the live&lt;br /&gt;
&apos;Cashback Offer- NA&apos; badges.&lt;br /&gt;
&lt;br /&gt;
Detail additions:&lt;br /&gt;
- the EMI scheme, when the circular gave one: &apos;... Low Cost EMI on 3, 6 months.&apos;&lt;br /&gt;
  The circular states it in its own column (&apos;3m,6m LCE&apos; beside &apos;3000 CC Full&lt;br /&gt;
  Swipe/CC EMI/UPI&apos;) and a partner needs both halves.&lt;br /&gt;
- eligible tenures on an EMI benefit: &apos;Rs.3,000 on Credit Card EMI (3, 6 months)&apos;.&lt;br /&gt;
  Cashback &apos;on Credit Card EMI&apos; is not actionable without knowing which tenures&lt;br /&gt;
  qualify. Full Swipe and UPI carry no tenure, so they get none.&lt;br /&gt;
&lt;br /&gt;
⚠️ A scheme is stated ONLY when the circular gave one. Tenures with no scheme are&lt;br /&gt;
described as nothing at all - naming them would read as a no-cost or low-cost claim&lt;br /&gt;
that was never made.&lt;br /&gt;
&lt;br /&gt;
Tests 14 -&gt; 16.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/WebOfferSyncService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/WebOfferSyncServiceTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37572</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37572</guid></item>
<item><pubDate>Thu, 10 Sep 2026 12:34:19 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37571 – offer circular: the month unit was swallowing the EMI scheme ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;offer circular: the month unit was swallowing the EMI scheme marker&lt;br /&gt;
&lt;br /&gt;
&apos;M&apos; is the month UNIT, not a separator, but the token loop flushed on it. &apos;3m,6m LCE&apos;&lt;br /&gt;
tokenises to 3, M, 6, M, LCE - each M banked its month as NONE, so the LCE arrived&lt;br /&gt;
with nothing pending and was silently lost.&lt;br /&gt;
&lt;br /&gt;
74 Sep&apos;26 offers carry a scheme in the tenure cell that never reached offer_tenure;&lt;br /&gt;
22 of them through this path (&apos;3m,6m LCE&apos;, &apos;6m,9m LCE&apos;, &apos;3m &amp; 6m LCE&apos;, &apos;3m, 6m, 9m,&lt;br /&gt;
12m, 18m, 24m LCE&apos;). The rest are bare &apos;CIB&apos; cells with no months at all, which is a&lt;br /&gt;
separate case and left alone.&lt;br /&gt;
&lt;br /&gt;
It also fixes &apos;3M (NCE), 6M &amp; Above LCE&apos;, where the M flushed BOTH groups before&lt;br /&gt;
either marker was seen - so an offer that is no-cost on 3 months and low-cost beyond&lt;br /&gt;
recorded neither.&lt;br /&gt;
&lt;br /&gt;
This is money: no-cost EMI costs the customer nothing and low-cost does not, so a lost&lt;br /&gt;
marker is a term a partner could quote wrongly at the counter.&lt;br /&gt;
&lt;br /&gt;
Months with no marker anywhere still bank as NONE via the end-of-cell flush - the same&lt;br /&gt;
answer the M branch used to give for a genuinely unmarked cell.&lt;br /&gt;
&lt;br /&gt;
New TenureParserTest, 6 cases, covering the regression and the shapes that must not&lt;br /&gt;
change.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/TenureParser.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/TenureParserTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37571</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37571</guid></item>
<item><pubDate>Thu, 10 Sep 2026 12:04:40 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37568 – offer circular: a failed web-offer sync must not be silent ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;offer circular: a failed web-offer sync must not be silent&lt;br /&gt;
&lt;br /&gt;
Swallowing the exception was right - a circular that parsed correctly must stay&lt;br /&gt;
PUBLISHED, and the sync is re-runnable while the parse is the expensive part.&lt;br /&gt;
Swallowing it SILENTLY was not.&lt;br /&gt;
&lt;br /&gt;
A TINYINT(1) cast threw in the sync on every ingest from 2026-09-08 to r37553 and&lt;br /&gt;
nothing looked wrong: processed_at advanced, the circular published, the email said&lt;br /&gt;
success. The only symptom was web_offer.synced_at standing still, which nobody was&lt;br /&gt;
watching. It went unnoticed for two days.&lt;br /&gt;
&lt;br /&gt;
Now:&lt;br /&gt;
- Summary carries webOfferSync, and states it in EVERY case - the counts on success,&lt;br /&gt;
  &apos;FAILED - &amp;lt;cause&gt;&apos; on failure, &apos;NOT RUN&apos; if it never executed. A missing line would&lt;br /&gt;
  be indistinguishable from a sync that never ran, so there is no missing line.&lt;br /&gt;
- That lands in offer_document.ingest_summary, so the review screen shows it.&lt;br /&gt;
- The notification email carries it too, and a failure renders as a red&lt;br /&gt;
  &apos;Web offers NOT updated&apos; block saying partners are still seeing the previous&lt;br /&gt;
  offers and that the parse itself is fine.&lt;br /&gt;
- The sync now runs BEFORE published(), so its outcome is part of what gets recorded&lt;br /&gt;
  rather than an afterthought. It is still REQUIRES_NEW with its exception caught, so&lt;br /&gt;
  it still cannot fail the ingest.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/CircularIngestRunner.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/CircularIngestService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37568</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37568</guid></item>
<item><pubDate>Thu, 10 Sep 2026 02:59:56 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37564 – Creation screens request only live listings from the item typeahead ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;Creation screens request only live listings from the item typeahead&lt;br /&gt;
&lt;br /&gt;
/item takes an activeOnly flag (default false, preserving current behaviour)&lt;br /&gt;
and passes it to getAllPartnerItemStringDescription. getItemAheadOptions takes&lt;br /&gt;
an optional 4th argument, so existing 3-argument callers are unaffected.&lt;br /&gt;
&lt;br /&gt;
Sent true from the two creation entry points:&lt;br /&gt;
- warehouse purchase (PO) invoice line picker&lt;br /&gt;
- the new-price-drop modal (#typeaheaditem)&lt;br /&gt;
&lt;br /&gt;
Left false where the screen works on records that already exist and may since&lt;br /&gt;
have been delisted: the price-drop pause/manage picker (#typeaheaditem1),&lt;br /&gt;
catalog-item, combo and prebooking.&lt;br /&gt;
&lt;br /&gt;
jsVersion 419 -&gt; 420 to cache-bust common.js / warehouse-purchase.js (419 was&lt;br /&gt;
already taken by another change).&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PriceDropController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/common.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/warehouse-purchase.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/price-drop.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37564</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37564</guid></item>
<item><pubDate>Wed, 09 Sep 2026 17:55:00 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37560 – ticket download option given and some enhancement on notification panel</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;ticket download option given and some enhancement on notification panel&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/CsController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/managerTicket.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/my-partner-tickets.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37560</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37560</guid></item>
<item><pubDate>Wed, 09 Sep 2026 17:40:59 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37559 – ticket download option given and some enhancement on notification panel</title><description>&lt;div&gt;&lt;strong&gt;ranu – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;ticket download option given and some enhancement on notification panel&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/CsController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/send-notification.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/send-notification.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/ticket.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37559</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37559</guid></item>
<item><pubDate>Wed, 09 Sep 2026 17:16:43 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37558 – system generated leak bgc l2 can assign to l1 without ...</title><description>&lt;div&gt;&lt;strong&gt;ranu – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;system generated leak bgc l2 can assign to l1 without any geo location&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/dtr/LeadStage.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/dtr/LeadStatus.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LeadController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/lead.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37558</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37558</guid></item>
<item><pubDate>Wed, 09 Sep 2026 15:50:50 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37557 – system generated leak bgc l2 can assign to l1 without ...</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;system generated leak bgc l2 can assign to l1 without any geo location&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LeadController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37557</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37557</guid></item>
<item><pubDate>Wed, 09 Sep 2026 13:34:48 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37554 – web offer: put the brand back in the title  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;web offer: put the brand back in the title&lt;br /&gt;
&lt;br /&gt;
  SEPTEMBER 2026 MOTOROLA Rs.1,000 cashback on Credit Card Full Swipe&lt;br /&gt;
  SEPTEMBER 2026 MOTOROLA No Cost EMI on 3, 6 months&lt;br /&gt;
&lt;br /&gt;
Month and brand now both match the convention of the 3,850 hand-written rows, which&lt;br /&gt;
is how the admin listing is scanned. What stays gone is the redundant&lt;br /&gt;
&apos;Cashback Offer-&apos; label: the value already states what the offer is, and calling a&lt;br /&gt;
scheme-only row a cashback offer is what produced the live &apos;Cashback Offer- NA&apos;&lt;br /&gt;
badges on 81 SKUs.&lt;br /&gt;
&lt;br /&gt;
Brand comes from the division&apos;s catalog brand, falling back to its display name, so&lt;br /&gt;
a division with no catalog.brand row (Google) still reads sensibly rather than&lt;br /&gt;
emitting an empty gap.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/WebOfferSyncService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/WebOfferSyncServiceTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37554</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37554</guid></item>
<item><pubDate>Wed, 09 Sep 2026 12:42:06 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37551 – web offer: keep the month in the title   ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;web offer: keep the month in the title&lt;br /&gt;
&lt;br /&gt;
  SEPTEMBER 2026 Up to Rs.4,000 cashback&lt;br /&gt;
  SEPTEMBER 2026 Rs.1,500 cashback on Credit Card EMI&lt;br /&gt;
  SEPTEMBER 2026 No Cost EMI on 3, 6 months&lt;br /&gt;
&lt;br /&gt;
Matches the convention of the 3,850 hand-written rows and is how the admin listing is&lt;br /&gt;
scanned. The brand stays out - the product card already shows it, so that was the&lt;br /&gt;
redundant half, and dropping it is what makes room for the value to lead.&lt;br /&gt;
&lt;br /&gt;
The month comes from the OFFER&apos;s own start date, not the circular&apos;s period: offers&lt;br /&gt;
run past a month end - four Aug&apos;26 Apple offers ran to 26 September - and labelling&lt;br /&gt;
one of those AUGUST on a badge read in September would be wrong.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/WebOfferSyncService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/WebOfferSyncServiceTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37551</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37551</guid></item>
<item><pubDate>Wed, 09 Sep 2026 12:37:13 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37550 – web offer: partner-facing titles, and stop calling a scheme offer ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;web offer: partner-facing titles, and stop calling a scheme offer a cashback offer&lt;br /&gt;
&lt;br /&gt;
web_offer.title is partner-facing - StoreController and DealsController map it into&lt;br /&gt;
the product&apos;s offer list - so it now leads with the value rather than a filing label:&lt;br /&gt;
&lt;br /&gt;
  Up to Rs.4,000 cashback&lt;br /&gt;
  Rs.1,500 cashback on Credit Card EMI&lt;br /&gt;
  10% cashback up to Rs.7,500 on Credit Card EMI&lt;br /&gt;
  No Cost EMI on 3, 6 months&lt;br /&gt;
&lt;br /&gt;
Month and brand are gone: the card already shows the product, and the offer carries&lt;br /&gt;
its own dates. The full breakdown sits in detailedText below it.&lt;br /&gt;
&lt;br /&gt;
This fixes a live defect. 16 published offers have no cashback at all, and the old&lt;br /&gt;
template rendered them &apos;SEPTEMBER 2026 XIAOMI Cashback Offer- NA&apos; with detail &apos;NA&apos;,&lt;br /&gt;
on 81 SKUs. They are EMI-scheme offers and now say so.&lt;br /&gt;
&lt;br /&gt;
Scheme inference at ingest: Motorola states the scheme in the DESCRIPTION rather than&lt;br /&gt;
the tenure cell - &apos;[3&amp;6 M]&apos; plus &apos;Only NCEMI&apos;, where every other OEM writes&lt;br /&gt;
&apos;6(NCE),9,12(LCE)&apos;. TenureParser is right to return NONE for such a cell; the scheme&lt;br /&gt;
is simply not in it. Recovered in CircularIngestService where both columns are in&lt;br /&gt;
hand, and deliberately narrow: only when EVERY tenure came back without a scheme AND&lt;br /&gt;
the description names exactly one. On Sep&apos;26 that is 10 offers, all Motorola; the&lt;br /&gt;
other 23 scheme-less rows are cashback offers whose descriptions are amounts, and&lt;br /&gt;
inventing a scheme for those would misstate the terms.&lt;br /&gt;
&lt;br /&gt;
This distinction is money: four of the Motorola rows are LOW cost EMI, and calling&lt;br /&gt;
them no-cost would promise a partner something the bank will not honour.&lt;br /&gt;
&lt;br /&gt;
&apos;No cashback.&apos; is dropped everywhere - the absence of an amount says it, and beside a&lt;br /&gt;
Cashback Instant Benefit scheme it flatly contradicted the name.&lt;br /&gt;
&lt;br /&gt;
Tests 8 -&gt; 12.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/CircularIngestService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/WebOfferSyncService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/WebOfferSyncServiceTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37550</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37550</guid></item>
<item><pubDate>Tue, 08 Sep 2026 19:39:29 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37546 – web offer sync: compose detailed text from the parsed offer ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;web offer sync: compose detailed text from the parsed offer&lt;br /&gt;
&lt;br /&gt;
detailedText is now built from benefit_timing + offer_benefit + offer_bank instead&lt;br /&gt;
of copying the circular&apos;s line:&lt;br /&gt;
&lt;br /&gt;
  Instant cashback. Rs.4,000 on Credit Card EMI; Rs.3,000 on Credit Card Full&lt;br /&gt;
  Swipe. Banks: Axis Bank, ICICI Bank, State Bank of India (credit cards)&lt;br /&gt;
&lt;br /&gt;
Every payment mode is always named, even when the circular&apos;s prose is terse&lt;br /&gt;
(&apos;10% CC EMI&apos;), and the amounts come from offer_benefit - the authoritative&lt;br /&gt;
per-mode source. CC/DC cannot leak here at all, because the mode codes expand&lt;br /&gt;
natively rather than being patched by find-and-replace.&lt;br /&gt;
&lt;br /&gt;
Three cases that would otherwise read badly:&lt;br /&gt;
- 21 offers carry NO benefit (circular cell &apos;NA&apos;, timing NONE). They are tenure-only&lt;br /&gt;
  offers, so they read &apos;No-cost EMI. No cashback.&apos; rather than showing a blank badge.&lt;br /&gt;
- The bank columns often list a bank under both card types while only one carries a&lt;br /&gt;
  benefit. Card types shown are restricted to those actually paid on, or the text&lt;br /&gt;
  would imply a debit offer that does not exist.&lt;br /&gt;
- benefit_timing UPI and NONE are not timings. Nothing is asserted rather than&lt;br /&gt;
  inventing one.&lt;br /&gt;
&lt;br /&gt;
smallText keeps the circular&apos;s short line - that column is only VARCHAR(256) and the&lt;br /&gt;
composed detail runs past it. One flowing paragraph, no line breaks, since the badge&lt;br /&gt;
may not render them.&lt;br /&gt;
&lt;br /&gt;
Tests 8 -&gt; 14.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/WebOfferSyncService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/WebOfferSyncServiceTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37546</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37546</guid></item>
<item><pubDate>Tue, 08 Sep 2026 16:39:19 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37544 – web offer sync: expand CC and DC to Credit Card ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;web offer sync: expand CC and DC to Credit Card and Debit Card&lt;br /&gt;
&lt;br /&gt;
The circular writes &apos;Rs.4000 Cashback on CC EMI&apos;; a partner reading the badge should&lt;br /&gt;
see &apos;Credit Card EMI&apos;. Applied to the title and the small/detailed text together, so&lt;br /&gt;
a badge and its detail never disagree.&lt;br /&gt;
&lt;br /&gt;
Word-bounded and applied BEFORE truncation: an expansion is never cut in half, and&lt;br /&gt;
letters inside a word are untouched - the circular&apos;s cells carry strings like&lt;br /&gt;
&apos;X300 Ext Kit&apos; and &apos;ACCESSORIES&apos;, which an unbounded replace would corrupt.&lt;br /&gt;
&lt;br /&gt;
On Sep&apos;26 this affects 155 of 259 descriptions for CC and 48 for DC.&lt;br /&gt;
&lt;br /&gt;
Two existing expectations updated to the new wording, and two tests added: one for&lt;br /&gt;
the expansion, one asserting DCX and ACCESSORIES survive intact.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/WebOfferSyncService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/WebOfferSyncServiceTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37544</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37544</guid></item>
<item><pubDate>Tue, 08 Sep 2026 12:10:42 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37543 – receive debit note: resolve the DOA section from the declared ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;receive debit note: resolve the DOA section from the declared condition, not from a change&lt;br /&gt;
&lt;br /&gt;
The condition dropdown renders with the partner&apos;s declared value already selected, so&lt;br /&gt;
a declared BAD - the ordinary DOA case - fired no change event and the DOA certificate&lt;br /&gt;
radios stayed hidden. The operator could not supply a certificate, and receiveDebitNoteItems&lt;br /&gt;
then refused the receipt for a missing one, making those debit notes unreceivable.&lt;br /&gt;
&lt;br /&gt;
applyDeclaredConditions seeds each dropdown from the row&apos;s data-declared and settles the&lt;br /&gt;
dependent sections on load; the show/hide logic moves out of the change handler into&lt;br /&gt;
syncReceiveConditionState, which reads the current state of the form rather than whatever&lt;br /&gt;
was last touched. The change handler now calls the same function.&lt;br /&gt;
&lt;br /&gt;
The server-side &apos;selected&apos; stays as a fallback: without it a declared BAD would present as&lt;br /&gt;
GOOD if the script failed to load, and the server reads that difference as the warehouse&lt;br /&gt;
disagreeing with the partner, which rejects the whole debit note.&lt;br /&gt;
&lt;br /&gt;
jsVersion 417 -&gt; 418.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/business/return.js&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37543</guid></item>
<item><pubDate>Mon, 07 Sep 2026 17:49:34 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37540 – loi process added, revival and code changes process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;loi process added, revival and code changes process&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/service/KnowlarityInsightsService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37540</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37540</guid></item>
<item><pubDate>Mon, 07 Sep 2026 12:42:16 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37539 – Fixed mail sender everywhere</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed mail sender everywhere&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/WalletController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37539</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37539</guid></item>
<item><pubDate>Fri, 04 Sep 2026 23:19:26 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37536 – purchase return: order the invoice-return queue by what still needs ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;purchase return: order the invoice-return queue by what still needs doing&lt;br /&gt;
&lt;br /&gt;
A return with no debit note sorts first - it is the one still owing an action -&lt;br /&gt;
and the screen reflects that ordering. Also refuses the cancel path when any order&lt;br /&gt;
on the invoice is in a state that must not be cancelled.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PurchaseReturnController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/invoice-return.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37536</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37536</guid></item>
<item><pubDate>Fri, 04 Sep 2026 01:35:50 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37533 – loi process added, revival and code changes process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;loi process added, revival and code changes process&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/RbmDrrDashboardController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/rbm-drr-dashboard.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37533</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37533</guid></item>
<item><pubDate>Thu, 03 Sep 2026 18:22:12 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37531 – offer circular: stop letter-led model names inheriting the previous variant ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;offer circular: stop letter-led model names inheriting the previous variant&lt;br /&gt;
&lt;br /&gt;
A part that is ONLY a memory spec inherits the preceding model name, because Oppo&lt;br /&gt;
writes &apos;RENO 15 PRO 256GB, 512GB&apos; and the second part is not a product. The pattern&lt;br /&gt;
matched too loosely: the optional unit group matched the FIRST letter of a model&lt;br /&gt;
name and the rest fell through the trailing character class, so &apos;G06, G37, G37&lt;br /&gt;
Power&apos; inherited its way to &apos;G06 G37&apos; - two Motorola phones fused into one entity&lt;br /&gt;
that matches no SKU, costing G37 its cashback on five offers.&lt;br /&gt;
&lt;br /&gt;
Requiring a leading digit makes it a memory spec rather than anything that merely&lt;br /&gt;
contains G/T and digits. Realme &apos;GT 7&apos; matches the same way and survived only&lt;br /&gt;
because it never follows a comma.&lt;br /&gt;
&lt;br /&gt;
Same root cause as the word-boundary guards on CAPACITY and MEMORY_PAIR: a digit&lt;br /&gt;
glued to letters belongs to the model name.&lt;br /&gt;
&lt;br /&gt;
ProductNamesTest: 11 -&gt; 12, covering &apos;G06, G37, G37 Power&apos; and &apos;GT 7T, GT 7&apos;.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/ProductNames.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/ProductNamesTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37531</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37531</guid></item>
<item><pubDate>Thu, 03 Sep 2026 18:22:01 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37530 – purchase return: use the auto-approve check on invoice cancellation  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;purchase return: use the auto-approve check on invoice cancellation&lt;br /&gt;
&lt;br /&gt;
Calls GstProService.isCancellableWithoutApproval (r37529) so a DC invoice, or an&lt;br /&gt;
unshipped order whose IRN is still cancellable, skips the approval step.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PurchaseReturnController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37530</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37530</guid></item>
<item><pubDate>Thu, 03 Sep 2026 18:17:05 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37528 – offer circular: apply the supersede rule on ingest (fofo)  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;offer circular: apply the supersede rule on ingest (fofo)&lt;br /&gt;
&lt;br /&gt;
A published circular now expires still-running offers from earlier circulars, and&lt;br /&gt;
deactivates the web offers they produced, so the same cashback is never current&lt;br /&gt;
twice. The converse also holds: re-ingesting an older circular while a newer one is&lt;br /&gt;
live leaves it expired rather than resurrecting it.&lt;br /&gt;
&lt;br /&gt;
Older offers remain readable as reference - only status changes, never end_date.&lt;br /&gt;
&lt;br /&gt;
Counts appear in the ingest summary as supersededOlderOffers / expiredAsSuperseded&lt;br /&gt;
and, on the web side, supersededOlderMonths / notPublishedSuperseded.&lt;br /&gt;
&lt;br /&gt;
ScopeConfigTest&apos;s stub gains the two new CircularIngestRepository methods - the same&lt;br /&gt;
brittleness the scripts/offer_circular README notes for JdbcIngestRepo.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/CircularIngestService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/WebOfferSyncService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/ScopeConfigTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37528</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37528</guid></item>
<item><pubDate>Thu, 03 Sep 2026 17:44:48 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37526 – offer circular: scope config screen, resolve screen, web offer sync ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 17 file(s) modified&lt;/strong&gt;&lt;br/&gt;offer circular: scope config screen, resolve screen, web offer sync (fofo)&lt;br /&gt;
&lt;br /&gt;
Screens (each its own endpoint, under the OFFER CIRCULAR menu):&lt;br /&gt;
- /offerCircularScope - add/edit divisions, take a brand in or out of scope,&lt;br /&gt;
  register label aliases. &apos;Remove&apos; is in_scope=0 + a required reason, never a&lt;br /&gt;
  DELETE: offer.division_id is an FK and the history would go with it.&lt;br /&gt;
- /offerCircularResolve - the product queue, split out of the review screen. The&lt;br /&gt;
  editor was a &amp;lt;td colspan=6&gt; pretending to be a form, which is why it never&lt;br /&gt;
  aligned; it is now master-detail. Naming and Coverage are separate tabs because&lt;br /&gt;
  an alias cannot answer a bundle at all - the coverage panel says so and offers&lt;br /&gt;
  the two answers that ARE safe (ignore, or reclassify as naming).&lt;br /&gt;
&lt;br /&gt;
Ingest:&lt;br /&gt;
- ScopeConfig resolves division aliases and carries the canonical label on&lt;br /&gt;
  Decision. insertOffer and ProductAliases.find use it; offer_raw_row keeps the&lt;br /&gt;
  verbatim label, being the source of truth for re-parsing.&lt;br /&gt;
- CircularIngestRunner publishes to dtr.web_offer after the document is marked&lt;br /&gt;
  PUBLISHED, in its own transaction with exceptions swallowed - a circular that&lt;br /&gt;
  parsed correctly must stay published even if the web sync fails.&lt;br /&gt;
&lt;br /&gt;
Review screen:&lt;br /&gt;
- the ingest summary was a raw Map.toString() inside a nowrap span and ran off&lt;br /&gt;
  the card; now parsed into chips with the drop reasons behind a disclosure.&lt;br /&gt;
&lt;br /&gt;
jsVersion -&gt; 417 (merged with r37525&apos;s 412; cssVersion 53 kept from that commit).&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/OfferCircularController.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/OfferCircularScopeController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/CircularIngestRunner.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/CircularIngestService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/ScopeConfig.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/WebOfferSyncService.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/js/offer-circular-resolve.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/offer-circular-review.js&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/js/offer-circular-scope.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/admin.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/include-scripts.vm&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/offer-circular-resolve.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/offer-circular-review.vm&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/offer-circular-scope.vm&lt;br /&gt;+ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/ScopeConfigTest.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/WebOfferSyncServiceTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37526</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37526</guid></item>
<item><pubDate>Thu, 03 Sep 2026 01:08:56 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37523 – loi process added, revival and code changes process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 12 file(s) modified&lt;/strong&gt;&lt;br/&gt;loi process added, revival and code changes process&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/onBoarding/LoiForm.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/onBoarding/LoiFormData.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/user/StoreTimelinetb.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/loiForm/LoiFormServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/StoreTimelineTatService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/StoreTimelineTatServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LoiFormController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PartnerOnBoardingPanelController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/loi-form.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/loi-form.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/rbm-drr-dashboard.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37523</guid></item>
<item><pubDate>Wed, 02 Sep 2026 18:55:51 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37519 – rbm drr dashboard position wise data</title><description>&lt;div&gt;&lt;strong&gt;ranu – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard position wise data&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesHierarchyAchievedByMovementModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesHierarchyMonthlyTargetModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/RbmDrrDashboardController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37519</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37519</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:58:29 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37516 – pending loi download access given to raj singh</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;pending loi download access given to raj singh&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LoiFormController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37516</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37516</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:46:42 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37513 – notification live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/NotificationTargetCriteria.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/NotificationSchedule.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationScheduleRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationScheduleRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/js/notification-calendar.js&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/notification-calendar.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37513</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37513</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:12:41 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37508 – notification live new ....api and modification , ui</title><description>&lt;div&gt;&lt;strong&gt;ranu – 11 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live new ....api and modification , ui&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/Notification.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/SendNotificationModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/NotificationCampaign.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SimpleCampaignParams.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationCampaignRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationCampaignRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/NotificationController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/send-notification.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/send-notification.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37508</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37508</guid></item>
<item><pubDate>Tue, 01 Sep 2026 17:49:23 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37505 – rbm drr dashboard , all today po rbm view maped</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard , all today po rbm view maped&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/RbmDrrDashboardController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37505</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37505</guid></item>
<item><pubDate>Tue, 01 Sep 2026 15:51:22 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37497 – rbm drr dashboard , all today po rbm view maped</title><description>&lt;div&gt;&lt;strong&gt;ranu – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard , all today po rbm view maped&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/RbmDrrDashboardController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/rbm-drr-dashboard.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37497</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F%2Ftrunk%2Fprofitmandi-fofo%2Fsrc%2Fmain%2Fjava%2Fcom%2F&amp;isdir=1&amp;rev=37497</guid></item>
</channel></rss>