<?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; /</title><description>WebSVN RSS feed &#x2013; SmartDukaan</description><lastBuildDate>Sun, 13 Sep 2026 13:37:19 +0530</lastBuildDate><generator>WebSVN 2.8.6-DEV</generator><language>en</language><link>https://svn.smartdukaan.com/log.php?repname=SmartDukaan&amp;path=%2F&amp;max=40&amp;peg=37565</link><atom:link href="https://svn.smartdukaan.com/rss.php?peg=37565&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Thu, 10 Sep 2026 03:00:55 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37565 – IMEI activation: 20s tick lanes for oppo/realme/vivo, idle once the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;IMEI activation: 20s tick lanes for oppo/realme/vivo, idle once the day clears&lt;br /&gt;
&lt;br /&gt;
Replaces the two once-a-day passes with chunk-per-tick lanes. Each tick takes one&lt;br /&gt;
chunk and returns; when a brand&apos;s pool comes back empty its turn is skipped, and&lt;br /&gt;
when everything is clear the ticks do nothing and stay silent until midnight.&lt;br /&gt;
&lt;br /&gt;
- browser lane (StandAlone): one chunk of 25 for one brand every 20s, oppo and&lt;br /&gt;
  realme by turns. Still exactly one ChromeDriver alive at a time.&lt;br /&gt;
- vivo lane: its own tick, chunk of 250. It must not share the browser lane --&lt;br /&gt;
  0.24s an imei against oppo&apos;s 10.2s means it would need ~70 hours behind them&lt;br /&gt;
  for work it does alone in 39 minutes.&lt;br /&gt;
&lt;br /&gt;
The snapshot is gone; the pool query is the cursor. That is what makes a restart&lt;br /&gt;
cost one chunk instead of the day: the 12:03 restart on 09-Sep forfeited ~4,000&lt;br /&gt;
lookups and the whole afternoon, and last_finish had read -1 for three days.&lt;br /&gt;
&lt;br /&gt;
The snapshot existed to stop the re-ask loop (realme, 29-Aug: 4,524 requests&lt;br /&gt;
against 1,004 distinct imeis). That is now closed at the source instead -- oppo,&lt;br /&gt;
realme and motorola stamp every imei they asked about, not just the ones that&lt;br /&gt;
produced a map entry, so a failed lookup rests until tomorrow rather than coming&lt;br /&gt;
back on the next tick. Motorola is fixed pre-emptively; nothing schedules it yet.&lt;br /&gt;
&lt;br /&gt;
Also:&lt;br /&gt;
- secondary and tertiary are merged by turns rather than concatenated. Safe while&lt;br /&gt;
  a pass walked to the end; without that guarantee oppo&apos;s 163 tertiary serials sat&lt;br /&gt;
  behind 3,819 secondary ones and would only be reached on a day that cleared.&lt;br /&gt;
- vivo abandons a tick rather than the chunk when the captcha solver returns no&lt;br /&gt;
  code -- one probe per 20s while it is down instead of 250, and no rows rested&lt;br /&gt;
  over a transient outage.&lt;br /&gt;
- the funnel gauges move from a pass to a day. due is measured on the first tick&lt;br /&gt;
  after midnight, the rest accumulate, and last_finish_epoch becomes a real&lt;br /&gt;
  completion clock. Truncation is detected at the midnight rollover, which is the&lt;br /&gt;
  case that never reaches an end-of-run at all.&lt;br /&gt;
&lt;br /&gt;
This does not create capacity. At the 21s/imei measured on 09-Sep the pool still&lt;br /&gt;
needs ~35 hours and will not clear; it now rolls over visibly instead of silently.&lt;br /&gt;
The lever for that is DAYS=1.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/monitored/ImeiActivationGauges.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/MotorolaImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/OppoImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/RealmeImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/StandAlone.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/VivoImeiActivationService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37565&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37565&amp;peg=37565</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&amp;isdir=1&amp;rev=37564&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37564&amp;peg=37565</guid></item>
<item><pubDate>Thu, 10 Sep 2026 02:52:18 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37563 – Filter delisted SKUs out of creation pickers; add rolling 24m ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;Filter delisted SKUs out of creation pickers; add rolling 24m delist migration&lt;br /&gt;
&lt;br /&gt;
Creation screens could offer items whose catalog.tag_listing.active = 0:&lt;br /&gt;
- Item.selectAllModels (scheme/offer model dropdown) joined tag_listing with&lt;br /&gt;
  no active predicate. Adding tl.active = true also gives the model-level&lt;br /&gt;
  rollup, since callers dedupe to catalogItemId: a model whose colours are&lt;br /&gt;
  all inactive now yields no rows, one keeping a listed colour stays.&lt;br /&gt;
- The shared partner item picker had no active filter at all. Added a second&lt;br /&gt;
  basis via getAllPartnerItemStringDescription(anyColor, activeOnly);&lt;br /&gt;
  activeOnly participates in the fofoItems cache key so the two bases cannot&lt;br /&gt;
  serve each other&apos;s cached results. Default stays false for screens that&lt;br /&gt;
  inspect or edit existing records.&lt;br /&gt;
- New TagListing.selectActiveItemIds named query backs the filter.&lt;br /&gt;
&lt;br /&gt;
Also adds the rolling 24-month delist migration: zero stock both sides, no&lt;br /&gt;
outstanding vendor PO (status IN (1,2), external supplier, unfulfilled &gt; 0 --&lt;br /&gt;
INIT is excluded as it is a drawer of stale drafts), and re-categorises&lt;br /&gt;
fully-dark mobile models to OTHER. Idempotent, audited, rollback documented.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/catalog/Item.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/catalog/TagListing.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/TagListingRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/TagListingRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/InventoryService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/InventoryServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/delist_inactive_listings_rolling_24m.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37563&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37563&amp;peg=37565</guid></item>
<item><pubDate>Thu, 10 Sep 2026 00:50:44 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37562 – Add SQL to delist pre-2025 Samsung listings with no stock ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add SQL to delist pre-2025 Samsung listings with no stock&lt;br /&gt;
&lt;br /&gt;
Marks 738 catalog.tag_listing rows (tag_id 4) inactive with eol_date&lt;br /&gt;
2026-09-08. These are Samsung listings published before 2025-01-01 holding&lt;br /&gt;
no stock in any SmartDukaan warehouse and none at any active partner store.&lt;br /&gt;
&lt;br /&gt;
Id list is frozen from the prod evaluation rather than re-derived, so the&lt;br /&gt;
same listings are delisted in every environment; stock tables in a copy&lt;br /&gt;
drift from prod. Script is idempotent and carries guards, verification and&lt;br /&gt;
a rollback block.&lt;br /&gt;
&lt;br /&gt;
Applied to prod hadb1 and the local dev copy.&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/delist_samsung_pre2025_no_stock.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37562&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37562&amp;peg=37565</guid></item>
<item><pubDate>Wed, 09 Sep 2026 18:10:22 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37561 – ticket download option given and some enhancement on notification panel</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 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/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&amp;isdir=1&amp;rev=37561&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37561&amp;peg=37565</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&amp;isdir=1&amp;rev=37560&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37560&amp;peg=37565</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&amp;isdir=1&amp;rev=37559&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37559&amp;peg=37565</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&amp;isdir=1&amp;rev=37558&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37558&amp;peg=37565</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&amp;isdir=1&amp;rev=37557&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37557&amp;peg=37565</guid></item>
<item><pubDate>Wed, 09 Sep 2026 14:51:37 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37556 – loi process added, revival and code changes process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 2 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/webapp/WEB-INF/views/ftl/loiData.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/pendingForm.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37556&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37556&amp;peg=37565</guid></item>
<item><pubDate>Wed, 09 Sep 2026 14:42:05 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37555 – web offer sync: one value per SKU per payment mode ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;web offer sync: one value per SKU per payment mode&lt;br /&gt;
&lt;br /&gt;
The circular says two things about the same phone. Motorola Sep&apos;26 page 9 names&lt;br /&gt;
&apos;G37 Power&apos; generically at Rs.1,000 CC Full Swipe (row 12) and &apos;G37 Power (8+128)&apos;&lt;br /&gt;
at Rs.2,000 (row 13), so G37 Power 8+128 carried both badges and a partner could&lt;br /&gt;
quote either.&lt;br /&gt;
&lt;br /&gt;
Precedence, per (catalog_id, txn_mode):&lt;br /&gt;
  1. a specifically named VARIANT beats a generic MODEL - the named line is the OEM&lt;br /&gt;
     being precise about that SKU&lt;br /&gt;
  2. at the same level, the higher value wins&lt;br /&gt;
  3. tie-break on lowest offer id, so the outcome is deterministic&lt;br /&gt;
&lt;br /&gt;
The generic line still covers every variant nobody named: G37 Power 4+64 keeps its&lt;br /&gt;
Rs.1,000 Full Swipe while 8+128 takes Rs.2,000. Verified on the live data - 1026311&lt;br /&gt;
now resolves to exactly CC_EMI 2500 and CC_FULL_SWIPE 2000, down from four competing&lt;br /&gt;
values.&lt;br /&gt;
&lt;br /&gt;
An offer keeps a SKU if it wins on at least one of its own modes, since one badge&lt;br /&gt;
carries every mode of its offer. Scheme-only offers are never filtered - no value to&lt;br /&gt;
compare.&lt;br /&gt;
&lt;br /&gt;
Deliberately NOT reusing v_offer_applicable, which encodes the same VARIANT-beats-&lt;br /&gt;
MODEL rule but has no document or status filter: once August is re-ingested its rows&lt;br /&gt;
enter that view and an EXPIRED August variant would silently suppress a live&lt;br /&gt;
September model. Scoping to one document avoids that; the view is left alone for&lt;br /&gt;
other consumers.&lt;br /&gt;
&lt;br /&gt;
Measured on Sep&apos;26: 557 product links -&gt; 458, 191 badges -&gt; 166.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/WebOfferSyncRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37555&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37555&amp;peg=37565</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&amp;isdir=1&amp;rev=37554&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37554&amp;peg=37565</guid></item>
<item><pubDate>Wed, 09 Sep 2026 13:11:25 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37553 – web offer sync: all_banks is TINYINT(1), so never cast it ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;web offer sync: all_banks is TINYINT(1), so never cast it to Number&lt;br /&gt;
&lt;br /&gt;
ClassCastException: java.lang.Boolean cannot be cast to java.lang.Number, thrown from&lt;br /&gt;
selectPublishableOffers on every ingest since 2026-09-08. Confirmed against the live&lt;br /&gt;
driver: SELECT all_banks returns java.lang.Boolean.&lt;br /&gt;
&lt;br /&gt;
MySQL Connector/J maps TINYINT(1) to Boolean while Hibernate may hand back a Number,&lt;br /&gt;
so the value must be read through isTrue() - the same shape as ScopeConfig.isTrue and&lt;br /&gt;
OfferScopeRepositoryImpl.isTrue, both of which exist for exactly this reason and both&lt;br /&gt;
of which I had in front of me when writing the cast.&lt;br /&gt;
&lt;br /&gt;
The failure was silent by design: CircularIngestRunner swallows sync exceptions so a&lt;br /&gt;
web-offer problem can never fail a good ingest. The circular kept publishing, the&lt;br /&gt;
document&apos;s processed_at kept moving, and the only symptom was that web_offer.synced_at&lt;br /&gt;
stopped advancing - which is what should have been checked before reporting the sync&lt;br /&gt;
as working on 8 September.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/WebOfferSyncRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37553&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37553&amp;peg=37565</guid></item>
<item><pubDate>Wed, 09 Sep 2026 12:43:18 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37552 – lead/knowlarity: stop a null lookup key from matching every row ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;lead/knowlarity: stop a null lookup key from matching every row&lt;br /&gt;
&lt;br /&gt;
selectByEquals maps a null VALUE to NO PREDICATE AT ALL rather than to &quot;= null&quot;,&lt;br /&gt;
because GenericRepositoryImpl.prepareEqualPredicate skips null entries. So a null&lt;br /&gt;
lookup key does not miss -- it selects the whole table and dies on&lt;br /&gt;
NonUniqueResultException. Two live call paths were doing exactly that.&lt;br /&gt;
&lt;br /&gt;
RecordingService.updateAgentCallLog read caller_id, which knowlarity has never sent&lt;br /&gt;
on push-call-log: a sample of 50 live webhooks contained it zero times. Every call&lt;br /&gt;
therefore ran selectByCallerId(null) -&gt; &quot;select every sip_master row&quot; -&gt; throw, and&lt;br /&gt;
the whole feed was discarded. 17 of those 50 were Connected calls with a real agent.&lt;br /&gt;
Resolve the agent from agent_number instead, which is the field that actually&lt;br /&gt;
identifies them and holds the sip_url; it arrives bare, sip:-prefixed, or as the&lt;br /&gt;
literals &quot;False&quot;/&quot;None&quot; when nobody picked up. caller_id is still honoured first in&lt;br /&gt;
case they ever start sending it. A payload naming no agent is INFO, and an agent&lt;br /&gt;
missing from sip_master is WARN (an ops fix, and per-agent, so an ERROR would&lt;br /&gt;
fingerprint into one GlitchTip issue per agent).&lt;br /&gt;
&lt;br /&gt;
AuthRepositoryImpl.putEmailOrMobile had the same hole via Long.parseLong(null)&lt;br /&gt;
falling into the catch and putting a null email. selectByEmailOrMobile(null)&lt;br /&gt;
degenerated to &quot;select all 405 users&quot;, and authenticate(null, hash) degenerated to&lt;br /&gt;
&quot;does ANY user have this password hash&quot;, which would answer true. Both fail closed&lt;br /&gt;
today only as an accident of how many rows the table holds, so the guard goes on the&lt;br /&gt;
one path they share.&lt;br /&gt;
&lt;br /&gt;
Fixes GlitchTip #58/#1324/#1335 (fofo, 281 events) and #10 (web).&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/auth/AuthRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/auth/SipRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/auth/SipRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/kommuno/RecordingService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37552&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37552&amp;peg=37565</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&amp;isdir=1&amp;rev=37551&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37551&amp;peg=37565</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&amp;isdir=1&amp;rev=37550&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37550&amp;peg=37565</guid></item>
<item><pubDate>Wed, 09 Sep 2026 12:36:26 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37549 – web offer sync: read tenures for scheme-only offers  selectTenures, ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;web offer sync: read tenures for scheme-only offers&lt;br /&gt;
&lt;br /&gt;
selectTenures, keyed by offer id like the benefit and bank reads.&lt;br /&gt;
&lt;br /&gt;
Needed because an offer with no cashback is still a real offer - a no-cost or&lt;br /&gt;
low-cost EMI scheme - and its tenures are the only thing it has to say. Without them&lt;br /&gt;
those rows can only be described as &apos;NA&apos;.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/WebOfferSyncRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/WebOfferSyncRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37549&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37549&amp;peg=37565</guid></item>
<item><pubDate>Wed, 09 Sep 2026 12:01:03 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37548 – v2 version some fixes</title><description>&lt;div&gt;&lt;strong&gt;ranu – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;v2 version some fixes&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/User.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2UserController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37548&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37548&amp;peg=37565</guid></item>
<item><pubDate>Wed, 09 Sep 2026 11:58:50 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37547 – v2 switch version fixes on server side</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;v2 switch version fixes on server side&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/NotificationController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37547&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37547&amp;peg=37565</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&amp;isdir=1&amp;rev=37546&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37546&amp;peg=37565</guid></item>
<item><pubDate>Tue, 08 Sep 2026 19:39:16 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37545 – web offer sync: read benefits and banks for the composed ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;web offer sync: read benefits and banks for the composed detail text&lt;br /&gt;
&lt;br /&gt;
selectBenefits and selectBanks, keyed by offer id and fetched once per circular&lt;br /&gt;
rather than per offer - 259 offers would otherwise be 518 extra round trips.&lt;br /&gt;
&lt;br /&gt;
The main query now also carries offer_id, benefit_timing and all_banks.&lt;br /&gt;
&lt;br /&gt;
Bank read takes INCLUDE rows only: an EXCLUDE is meaningful only when all_banks=1,&lt;br /&gt;
and such an offer is described as &apos;All banks&apos; rather than by listing an exclusion a&lt;br /&gt;
partner cannot act on.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/WebOfferSyncRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/WebOfferSyncRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37545&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37545&amp;peg=37565</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&amp;isdir=1&amp;rev=37544&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37544&amp;peg=37565</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&amp;isdir=1&amp;rev=37543&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37543&amp;peg=37565</guid></item>
<item><pubDate>Mon, 07 Sep 2026 17:52:35 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37542 – 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-dao/src/main/java/com/spice/profitmandi/dao/enumuration/onBorading/onBoardingFormEnums/StoreType.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37542&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37542&amp;peg=37565</guid></item>
<item><pubDate>Mon, 07 Sep 2026 17:51:16 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37541 – loi process added, revival and code changes process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 2 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/enumuration/dtr/LeadSource.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&amp;isdir=1&amp;rev=37541&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37541&amp;peg=37565</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&amp;isdir=1&amp;rev=37540&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37540&amp;peg=37565</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&amp;isdir=1&amp;rev=37539&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37539&amp;peg=37565</guid></item>
<item><pubDate>Sat, 05 Sep 2026 05:56:43 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37538 – gstpro: a shipped delivery challan is a return, not a ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;gstpro: a shipped delivery challan is a return, not a cancellation&lt;br /&gt;
&lt;br /&gt;
Movement becomes the single discriminator for both document types. Nothing has&lt;br /&gt;
left the warehouse, so nothing happened and the document can be withdrawn; once&lt;br /&gt;
the goods have shipped the document records a movement that really occurred, and&lt;br /&gt;
the only honest reversal is an opposing document - a credit note through finance.&lt;br /&gt;
&lt;br /&gt;
The clock is the only thing that differs. A tax invoice must also be inside its&lt;br /&gt;
24h IRN window, because past that NIC will not cancel the IRN. A delivery challan&lt;br /&gt;
has no IRN and no acknowledgement - every DC row carries a placeholder irn and a&lt;br /&gt;
null ack_date - so no clock applies to it: an unshipped challan stays withdrawable&lt;br /&gt;
whatever its age, and its e-way bill is cancelled on that path since nothing moved&lt;br /&gt;
under it.&lt;br /&gt;
&lt;br /&gt;
Previously a DC short-circuited to cancellable regardless of shipping, which would&lt;br /&gt;
have voided challans whose goods were already in transit.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/GstProService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37538&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37538&amp;peg=37565</guid></item>
<item><pubDate>Fri, 04 Sep 2026 23:19:27 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37537 – carlcare activation: retry a transient failure once before giving up ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;carlcare activation: retry a transient failure once before giving up&lt;br /&gt;
&lt;br /&gt;
One retry after a 1.5s backoff - long enough to clear the far end&apos;s rate window,&lt;br /&gt;
short enough to still fit inside a scheduler tick. A transient network blip was&lt;br /&gt;
otherwise recorded as a hard activation failure for that IMEI.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CarlcareImeiActivationService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37537&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37537&amp;peg=37565</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&amp;isdir=1&amp;rev=37536&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37536&amp;peg=37565</guid></item>
<item><pubDate>Fri, 04 Sep 2026 23:19:17 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37535 – purchase return: guard invoice cancellation, and surface rejected-with-DN returns  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;purchase return: guard invoice cancellation, and surface rejected-with-DN returns&lt;br /&gt;
&lt;br /&gt;
PurchaseReturnServiceImpl gains assertInvoiceNotCancelled and assertNotGrnd, so a&lt;br /&gt;
cancellation is refused when the invoice is already cancelled or the goods have been&lt;br /&gt;
GRN&apos;d - a return cannot be undone once the stock has been received in.&lt;br /&gt;
&lt;br /&gt;
PurchaseReturnOrderRepositoryImpl also counts returns that were rejected but never&lt;br /&gt;
acknowledged by the retailer while carrying a debit note, which otherwise fell out&lt;br /&gt;
of the pending queue despite still owing an action.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/PurchaseReturnOrderRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/PurchaseReturnServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37535&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37535&amp;peg=37565</guid></item>
<item><pubDate>Fri, 04 Sep 2026 01:37:10 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37534 – loi process added, revival and code changes process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 2 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/model/SalesHierarchyBrandPartnerCountModel.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesHierarchyBrandSoldModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37534&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37534&amp;peg=37565</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&amp;isdir=1&amp;rev=37533&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37533&amp;peg=37565</guid></item>
<item><pubDate>Thu, 03 Sep 2026 18:23:08 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37532 – gstpro: do not cancel a DC e-way bill once the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;gstpro: do not cancel a DC e-way bill once the consignment has shipped&lt;br /&gt;
&lt;br /&gt;
Three cases on cancelling a delivery-challan invoice:&lt;br /&gt;
- no EWB recorded: nothing to cancel at NIC&lt;br /&gt;
- already shipped: leave the EWB intact and void the challan locally. The goods&lt;br /&gt;
  moved under that bill, so it is the record of a journey that happened; cancelling&lt;br /&gt;
  would strip cover from it, and NIC refuses the cancel anyway once a bill has been&lt;br /&gt;
  verified in transit. The return leg is a fresh movement needing its own EWB.&lt;br /&gt;
- never dispatched: cancel the EWB, since nothing moved under it.&lt;br /&gt;
&lt;br /&gt;
Also reuses the orders already fetched for the shipped check rather than selecting&lt;br /&gt;
by invoice number twice.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/GstProService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37532&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37532&amp;peg=37565</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&amp;isdir=1&amp;rev=37531&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37531&amp;peg=37565</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&amp;isdir=1&amp;rev=37530&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37530&amp;peg=37565</guid></item>
<item><pubDate>Thu, 03 Sep 2026 18:21:48 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37529 – purchase return: auto-approve invoice cancellation where it is safe  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;purchase return: auto-approve invoice cancellation where it is safe&lt;br /&gt;
&lt;br /&gt;
GstProService.isCancellableWithoutApproval: a DC invoice cancels without approval;&lt;br /&gt;
anything else needs the order to be unshipped AND the IRN to still be cancellable.&lt;br /&gt;
&lt;br /&gt;
PurchaseReturnServiceImpl marks the order INVOICE_CANCELLED with the refund actor,&lt;br /&gt;
timestamp and reason recorded, and sets each line item&apos;s returnQty to its full&lt;br /&gt;
quantity - a cancelled invoice returns everything on it.&lt;br /&gt;
&lt;br /&gt;
Committed on behalf of the working copy; dao goes first so the method exists before&lt;br /&gt;
the fofo controller that calls it.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/GstProService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/PurchaseReturnServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37529&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37529&amp;peg=37565</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&amp;isdir=1&amp;rev=37528&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37528&amp;peg=37565</guid></item>
<item><pubDate>Thu, 03 Sep 2026 18:16:40 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37527 – offer circular: a new month supersedes every older one  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;offer circular: a new month supersedes every older one&lt;br /&gt;
&lt;br /&gt;
Publishing a circular expires still-running offers from earlier circulars, at the&lt;br /&gt;
offers level and again for the web offers they produced.&lt;br /&gt;
&lt;br /&gt;
Why: the new circular restates whatever is still live, so leaving the old month&lt;br /&gt;
ACTIVE means the same cashback is current twice. Verified Aug&apos;26 -&gt; Sep&apos;26: all 24&lt;br /&gt;
SKUs covered by August&apos;s four still-running Apple offers were carried into&lt;br /&gt;
September, six of them twice.&lt;br /&gt;
&lt;br /&gt;
- expireOlderDocumentOffers: status ACTIVE -&gt; EXPIRED for earlier documents.&lt;br /&gt;
  end_date is deliberately NOT touched - it is what the OEM said, and older offers&lt;br /&gt;
  stay readable as reference. They simply stop being current.&lt;br /&gt;
- expireIfSuperseded: the converse, so re-ingesting an OLD circular while a newer&lt;br /&gt;
  one is live cannot resurrect it. With both, &apos;newest circular wins&apos; holds whatever&lt;br /&gt;
  order documents are ingested in.&lt;br /&gt;
- deactivateOlderPeriods / hasNewerPublishedPeriod do the same for dtr.web_offer.&lt;br /&gt;
&lt;br /&gt;
Verified on real data in a rolled-back transaction: publishing Sep expired 165&lt;br /&gt;
still-ACTIVE Aug offers (many stale since the 18 Aug ingest), Sep did not expire&lt;br /&gt;
itself, and re-ingesting Aug while Sep is live self-expired its 4 revived offers.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/CircularIngestRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/CircularIngestRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/WebOfferSyncRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/WebOfferSyncRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37527&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37527&amp;peg=37565</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&amp;isdir=1&amp;rev=37526&amp;peg=37565</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37526&amp;peg=37565</guid></item>
</channel></rss>