<?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>Thu, 20 Aug 2026 19:56:08 +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=37330</link><atom:link href="https://svn.smartdukaan.com/rss.php?peg=37330&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Mon, 17 Aug 2026 21:07:56 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37330 – Add Pine Labs affordability circular parsing and ingest  Turns ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 21 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add Pine Labs affordability circular parsing and ingest&lt;br /&gt;
&lt;br /&gt;
Turns the monthly OEM &quot;Mobile &amp; Laptop Offers&quot; PDF into the offers schema: tabula&lt;br /&gt;
extraction to nine verbatim columns per row, per-cell parsers for benefit, tenure,&lt;br /&gt;
bank and footnote text, catalog matching, and a scheduler that claims DRAFT&lt;br /&gt;
documents uploaded from the FOFO portal and emails the uploader the outcome.&lt;br /&gt;
&lt;br /&gt;
Ships inert. offer.circular.ingest.enabled defaults to false, so the scheduler does&lt;br /&gt;
nothing until an environment opts in, and offer.circular.review.url defaults to&lt;br /&gt;
empty - neither key is required for the context to start.&lt;br /&gt;
&lt;br /&gt;
- tabula added here and not in profitmandi-common so PDFBox never reaches the&lt;br /&gt;
  web/fofo WARs; bouncycastle, slf4j-simple and jai-imageio excluded (version&lt;br /&gt;
  clash, duplicate SLF4J binding, and unused image decoding respectively)&lt;br /&gt;
- offer_raw_row holds all nine columns verbatim, so re-parsing reads the table and&lt;br /&gt;
  never the PDF again&lt;br /&gt;
- product_alias is consulted before matching, so a human confirmation recorded once&lt;br /&gt;
  keeps applying every following month&lt;br /&gt;
&lt;br /&gt;
ProductNamesTest locks in the product-name parsing, which decides which SKU an&lt;br /&gt;
offer&apos;s money lands on. Every case there is a real mis-parse, and they share one&lt;br /&gt;
root cause: characters or digits belonging to the model name being eaten as memory&lt;br /&gt;
or stripped as punctuation. Two worth naming:&lt;br /&gt;
&lt;br /&gt;
- A memory spec with no GB/TB unit is still a memory spec. Motorola writes&lt;br /&gt;
  &quot;(8+256)&quot; and vivo &quot;(8+256G)&quot;; unrecognised, the matcher believed no size was&lt;br /&gt;
  given and bound the offer to an arbitrary sibling - a 1,000 Edge 60 Pro 8+256&lt;br /&gt;
  offer and a 2,000 12+256 offer landed on the same SKU.&lt;br /&gt;
- Two variant groups written back-to-back are two products. &quot;Edge 70 Pro&lt;br /&gt;
  (8+256)(12+256)&quot; stayed one product bound to a single SKU while the 12+256&lt;br /&gt;
  variant silently got no offer at all.&lt;br /&gt;
&lt;br /&gt;
Bundled accessories are deliberately NOT stripped back to the bare phone. Doing so&lt;br /&gt;
resolves 30 CATALOG_GAP rows and looks safe on Oppo, whose bundled and bare rows&lt;br /&gt;
carry identical values - but vivo caps X300 Pro(16+512G) at 10,000 on its own row&lt;br /&gt;
and 11,000 on the &quot;+Extender&quot; row, the difference being the Extender. Merging them&lt;br /&gt;
would let the bundle&apos;s cap be claimed on a phone sold without the accessory.&lt;br /&gt;
Whether a bundle offer transfers to the bare SKU is a commercial question the PDF&lt;br /&gt;
does not answer, so it is a manual coverage decision, not a parsing rule.&lt;br /&gt;
&lt;br /&gt;
Verified against the Aug&apos;26 circular on the local DB: 324 rows in the PDF, 239&lt;br /&gt;
loaded, producing 361 benefits, 511 tenures, 911 bank links and 663 products, of&lt;br /&gt;
which 74% resolve automatically. ProductNamesTest 11/11.&lt;/div&gt;~ /trunk/profitmandi-cron/build.gradle&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular/BankTextParser.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular/BenefitParser.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular/CatalogIndex.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular/CircularExtractor.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular/CircularIngestScheduler.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular/CircularIngestService.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular/CircularRow.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular/FootnoteParser.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular/ProductAliases.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular/ProductMatcher.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular/ProductNames.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular/ScopeConfig.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular/SequenceRatio.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular/TenureParser.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/test/java/com&lt;br /&gt;+ /trunk/profitmandi-cron/src/test/java/com/smartdukaan&lt;br /&gt;+ /trunk/profitmandi-cron/src/test/java/com/smartdukaan/cron&lt;br /&gt;+ /trunk/profitmandi-cron/src/test/java/com/smartdukaan/cron/offercircular&lt;br /&gt;+ /trunk/profitmandi-cron/src/test/java/com/smartdukaan/cron/offercircular/ProductNamesTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37330&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37330&amp;peg=37330</guid></item>
<item><pubDate>Mon, 17 Aug 2026 21:07:00 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37329 – Add offers-schema repositories for the Pine Labs affordability circular  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add offers-schema repositories for the Pine Labs affordability circular&lt;br /&gt;
&lt;br /&gt;
Three repositories over the offers schema, split by who is allowed to write what:&lt;br /&gt;
&lt;br /&gt;
- OfferCircularRepository - read side for the review screen (verbatim rows,&lt;br /&gt;
  documents, per-offer parsed detail)&lt;br /&gt;
- CircularIngestRepository - write side for ingest; claims a DRAFT document with&lt;br /&gt;
  a guarded UPDATE and deletes only rows derived from that one document, so&lt;br /&gt;
  re-ingesting one month cannot disturb another&lt;br /&gt;
- OfferCurationRepository - write side for manual curation&lt;br /&gt;
&lt;br /&gt;
The split is deliberate: a caller that only displays circulars should not hold a&lt;br /&gt;
handle that can rewrite the scope config or the offer tables.&lt;br /&gt;
&lt;br /&gt;
OfferCurationRepository writes offers.product_alias and nothing else. An alias is&lt;br /&gt;
config, keyed on (division_id, raw_text), so re-ingest reproduces it and one&lt;br /&gt;
decision carries into every later circular. Writing offer_product instead would be&lt;br /&gt;
derived data that re-ingest deletes, which is why doing so has to set&lt;br /&gt;
manually_curated and freeze the circular permanently - not a trade worth making for&lt;br /&gt;
a naming decision, so this repository cannot make it.&lt;br /&gt;
&lt;br /&gt;
A PIN is validated against the division&apos;s own brand and category before it is&lt;br /&gt;
stored. Nothing downstream re-checks a pinned id - the matcher takes it at face&lt;br /&gt;
value - so an unverified exception would silently mismap money.&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers&lt;br /&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/OfferCircularRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/OfferCircularRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/OfferCurationRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/OfferCurationRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37329&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37329&amp;peg=37330</guid></item>
<item><pubDate>Mon, 17 Aug 2026 19:25:56 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37328 – Fetch a fresh EWB auth token when the cached one ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fetch a fresh EWB auth token when the cached one is stale&lt;br /&gt;
&lt;br /&gt;
Two defects made an expired EWB token unrecoverable, surfacing as GSP102&lt;br /&gt;
&quot;eInvoice AuthToken not found or expired&quot; on every GET.&lt;br /&gt;
&lt;br /&gt;
1. ewbApiGet&apos;s retry was unreachable. NIC returns GSP102 with HTTP 400, and&lt;br /&gt;
   RestClient.execute throws GE_1005 on any non-2xx before returning the body, so the&lt;br /&gt;
   &apos;if (response.contains(&quot;GSP102&quot;))&apos; branch could never run. A failed first attempt is&lt;br /&gt;
   now treated as a possibly-stale token and retried once with a freshly minted one; a&lt;br /&gt;
   second failure propagates. The POST path was unaffected — executeJson does not check&lt;br /&gt;
   status, so its retry already worked.&lt;br /&gt;
&lt;br /&gt;
2. Eviction targeted the wrong cache. The token is cached in redisCacheManager but all&lt;br /&gt;
   three sites evicted through redisFortnightlyCacheManage, a different cache, so the&lt;br /&gt;
   eviction was a silent no-op and the stale token survived. Eviction now goes through&lt;br /&gt;
   GstProAuthService.evictEwbAuthToken, declared beside the @Cacheable and pinned to the&lt;br /&gt;
   same cacheManager so the two cannot drift apart again.&lt;br /&gt;
&lt;br /&gt;
Found while dry-running the EWB backfill, which failed on the first invoice.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/GstProAuthService.java&lt;br /&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=37328&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37328&amp;peg=37330</guid></item>
<item><pubDate>Mon, 17 Aug 2026 17:46:07 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37327 – super retailer club 5 live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 21 file(s) modified&lt;/strong&gt;&lt;br/&gt;super retailer club 5 live&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/FofoOrderRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/FofoOrderRepositoryImpl.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/DashboardController.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/1 GM Gold Coin.png&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/accessories.png&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/calendar_.png&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/CURRENTLY AIMING FOR.png&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/download.png&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/Group 4.png&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/Maharaja.png&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/Mobile And tv.png&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/Raftaar.png&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/Shuruaat.png&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/Tarakki.png&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/Target.png&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/TOTAL ACHIEVEMENT.png&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/Udaan.png&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/images/src-images/Vijeta.png&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&amp;isdir=1&amp;rev=37327&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37327&amp;peg=37330</guid></item>
<item><pubDate>Mon, 17 Aug 2026 17:23:40 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37326 – Add --backfillMissingEwb cron arg  Runs InvoiceService.backfillMissingEwb over an explicit ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add --backfillMissingEwb cron arg&lt;br /&gt;
&lt;br /&gt;
Runs InvoiceService.backfillMissingEwb over an explicit invoice list:&lt;br /&gt;
  --backfillMissingEwb --invoiceNumbers=A,B,C [--dryRun]&lt;br /&gt;
&lt;br /&gt;
Explicit list rather than a date window so the backfill only touches the invoices known&lt;br /&gt;
to have lost their EWB. NOT_SUPPORTED on the RunOnceTasks wrapper suspends the&lt;br /&gt;
class-level transaction, keeping the NIC lookups outside one.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/Application.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/migrations/RunOnceTasks.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37326&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37326&amp;peg=37330</guid></item>
<item><pubDate>Mon, 17 Aug 2026 17:23:32 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37325 – Add EWB backfill for invoices whose IRN was recovered via ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add EWB backfill for invoices whose IRN was recovered via DUPIRN&lt;br /&gt;
&lt;br /&gt;
When GenerateIRN carries EwbDtls, NIC files the IRN and e-way bill together and reports&lt;br /&gt;
the EWB back only in that response, flagged by InfoDtls[InfCd=EWBPPD]. A read timeout&lt;br /&gt;
sends the retry down the DUPIRN path, which recovers the IRN via the get-e-invoice&lt;br /&gt;
endpoint — that response carries neither InfoDtls nor EWB fields. The EWB therefore&lt;br /&gt;
exists at NIC while ewb_no stays null locally, and since updatePdfModelWithIrnDetails&lt;br /&gt;
gates the entire e-way bill section on ewb_no, the stored PDF omits it altogether.&lt;br /&gt;
&lt;br /&gt;
backfillMissingEwb() looks the EWB up by (seller GSTIN, ack date), matches on docNo, and&lt;br /&gt;
takes actualDist from the per-EWB call since the distance is printed on the invoice. It&lt;br /&gt;
then re-renders the PDF; generateIrnForInvoices returns early once irn_generated is set,&lt;br /&gt;
so nothing is re-filed at NIC.&lt;br /&gt;
&lt;br /&gt;
NIC is queried with the transaction suspended (NOT_SUPPORTED); the write and the&lt;br /&gt;
re-render each run in their own REQUIRES_NEW transaction.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/invoicing/InvoiceService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37325&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37325&amp;peg=37330</guid></item>
<item><pubDate>Mon, 17 Aug 2026 16:32:42 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 37324 – Lead Management: restrict lead view to field-level sales only (L1-L3). ...</title><description>&lt;div&gt;&lt;strong&gt;aman – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Lead Management: restrict lead view to field-level sales only (L1-L3). Any SALES position at any level previously forced the own+reportees lead filter, so senior sales heads (L4+ BM/RSM/NSM/co-founder L7) lost visibility of all leads and their dashboard charts collapsed. hasCategory check replaced with isFieldSales() at both view-filter sites; assignee validation untouched.&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=37324&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37324&amp;peg=37330</guid></item>
<item><pubDate>Mon, 17 Aug 2026 16:28:39 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37323 – Drop irn_attempt_count; IRN transport retry is unbounded  Removes the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Drop irn_attempt_count; IRN transport retry is unbounded&lt;br /&gt;
&lt;br /&gt;
Removes the attempt counter added in r37322 along with its pending ALTER TABLE, so the&lt;br /&gt;
change no longer carries a schema dependency.&lt;br /&gt;
&lt;br /&gt;
NIC outages resolve within the day, and an invoice legally requires an IRN, so capping&lt;br /&gt;
the retry would not remove the obligation — it would only stop trying. Transport failures&lt;br /&gt;
now stay queued (irn_generated NULL) until the provider recovers; only a genuine rejection&lt;br /&gt;
from NIC is terminal. The failure reason is still recorded in irn_error_message, which&lt;br /&gt;
distinguishes a requeued transport failure from an invoice never yet attempted.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/transaction/EInvoiceDetails.java&lt;br /&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/transaction/invoicing/InvoiceService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37323&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37323&amp;peg=37330</guid></item>
<item><pubDate>Mon, 17 Aug 2026 15:45:41 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37322 – Stop treating IRN transport timeouts as terminal; isolate NIC calls ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Stop treating IRN transport timeouts as terminal; isolate NIC calls from batch transaction&lt;br /&gt;
&lt;br /&gt;
A read timeout to GSTPro/NIC was recorded as a final verdict (irn_generated=false),&lt;br /&gt;
so 79 invoices billed on 2026-08-17 were left permanently without an IRN even though&lt;br /&gt;
NIC may well have filed them. A timeout means the call never completed, not that the&lt;br /&gt;
document was rejected.&lt;br /&gt;
&lt;br /&gt;
- markEInvoiceFailed -&gt; recordIrnFailure(invoiceNumber, Throwable): transport failures&lt;br /&gt;
  leave irn_generated NULL so the cron retries (DUPIRN recovers anything NIC did file);&lt;br /&gt;
  only a genuine rejection is terminal. Alert email now fires only when terminal.&lt;br /&gt;
- New einvoice_details.irn_attempt_count bounds that retry at 10 attempts, reset on&lt;br /&gt;
  success, so a prolonged NIC outage still converges instead of looping forever.&lt;br /&gt;
  Requires the matching ALTER TABLE before deploy.&lt;br /&gt;
- New saveInvoiceInNewTransaction(invoiceNumber): REQUIRES_NEW per invoice, reloading&lt;br /&gt;
  orders inside it. RunOnceTasks has class-level @Transactional wrapping the whole&lt;br /&gt;
  batch loop, so every NIC call previously ran inside one transaction holding write&lt;br /&gt;
  locks on all orders in the batch; at 60s per call that window is unacceptable.&lt;br /&gt;
  updateIrnsToInvoices and regenerateBilledInvoices now carry only invoice numbers,&lt;br /&gt;
  keeping the batch transaction read-only.&lt;br /&gt;
- Route all NIC calls (IRN gen, auth, cancel, EWB) through the 60s regulator profile&lt;br /&gt;
  via GstProAuthService.nicRestClient(). getGstDetails stays on the 10s default since&lt;br /&gt;
  it runs on request threads.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/transaction/EInvoiceDetails.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/GstProAuthService.java&lt;br /&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/transaction/invoicing/InvoiceService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37322&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37322&amp;peg=37330</guid></item>
<item><pubDate>Mon, 17 Aug 2026 15:45:29 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37321 – Preserve transport-failure cause in RestClient; add 60s regulator timeout profile ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Preserve transport-failure cause in RestClient; add 60s regulator timeout profile&lt;br /&gt;
&lt;br /&gt;
RestClient wrapped IOException/ClientProtocolException into RuntimeException(GE_1006)&lt;br /&gt;
without a cause, so callers could not tell a read timeout apart from a business&lt;br /&gt;
rejection. Pass the original exception as the cause at all four transport catch sites;&lt;br /&gt;
message text is unchanged.&lt;br /&gt;
&lt;br /&gt;
Add HttpClientFactory.slowRegulatorRequestConfig() (60s socket) for NIC e-invoice/EWB&lt;br /&gt;
calls, which routinely exceed the global 10s default at peak, plus a RestClient&lt;br /&gt;
constructor taking an explicit RequestConfig. The global default is unchanged.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/web/client/HttpClientFactory.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/web/client/RestClient.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37321&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37321&amp;peg=37330</guid></item>
<item><pubDate>Fri, 14 Aug 2026 18:57:35 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37320 – one assist ew at 99 up to 20k</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;one assist ew at 99 up to 20k&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/resources/oneassistplans.xlsx&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37320&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37320&amp;peg=37330</guid></item>
<item><pubDate>Fri, 14 Aug 2026 18:17:18 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37319 – Fix partner-performance tertiary: aggregate order items (qty*mop), not the POS-typed ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 6 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix partner-performance tertiary: aggregate order items (qty*mop), not the POS-typed order header&lt;br /&gt;
&lt;br /&gt;
The tertiary panel summed fofo_order.total_amount - a price typed at the partner POS&lt;br /&gt;
and never validated against the catalogue - and attributed each whole order to its&lt;br /&gt;
first line item&apos;s brand via .get(0). One mistyped digit inflated reported sell-out&lt;br /&gt;
10x, and mixed-brand orders booked 100% to the first brand, leaving the rest at zero.&lt;br /&gt;
Defect dates from r32000/r32034 (May 2023); the panel was the only tertiary consumer&lt;br /&gt;
diverging from the qty*mop basis.&lt;br /&gt;
&lt;br /&gt;
- New FofoOrder.selectMonthlyBrandTertiary: sum(quantity*mop) grouped by&lt;br /&gt;
  (year*100+month) and item brand - the same basis selectPartnerTertiarySales&lt;br /&gt;
  already uses for the DSR and the partner tier calculation&lt;br /&gt;
- PerformanceController: replaces two entity-loading queries (every FofoOrder and&lt;br /&gt;
  FofoOrderItem for 6 months) with one aggregate; all items now count, each under&lt;br /&gt;
  its own brand&lt;br /&gt;
- Month labels unchanged - toMonthLabel rebuilds the MMM&apos;&apos;uu key, template untouched&lt;br /&gt;
- Remove V2FofoPerformanceController, the /v2/fofo JSON copy carrying the same defect&lt;br /&gt;
&lt;br /&gt;
Verified against dev DB for fofo_id 175139501: Jul 2026 now 16,94,939 (panel&lt;br /&gt;
previously showed 50,92,440); all six months match the qty*mop basis.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/fofo/FofoOrder.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/MonthlyBrandTertiaryModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/FofoOrderRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/FofoOrderRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PerformanceController.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoPerformanceController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37319&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37319&amp;peg=37330</guid></item>
<item><pubDate>Fri, 14 Aug 2026 16:04:50 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37318 – v2 version some fixes</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;v2 version some fixes&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/checkout/OrderController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37318&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37318&amp;peg=37330</guid></item>
<item><pubDate>Fri, 14 Aug 2026 15:53:27 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37317 – Active Scratch Offers</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Active Scratch Offers&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/ScratchOffer.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37317&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37317&amp;peg=37330</guid></item>
<item><pubDate>Fri, 14 Aug 2026 15:47:53 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37316 – Active Scratch Offers</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Active Scratch Offers&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/ScratchOffer.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37316&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37316&amp;peg=37330</guid></item>
<item><pubDate>Fri, 14 Aug 2026 15:41:05 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37315 – Active Scratch Offers</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Active Scratch Offers&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/ScratchOfferRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37315&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37315&amp;peg=37330</guid></item>
<item><pubDate>Fri, 14 Aug 2026 13:22:06 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37314 – Fixed max limit to 15 lac for Credit limit</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed max limit to 15 lac for Credit limit&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasks.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37314&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37314&amp;peg=37330</guid></item>
<item><pubDate>Fri, 14 Aug 2026 12:09:49 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37313 – v2 version some fixes</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;v2 version some fixes&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoOrderController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37313&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37313&amp;peg=37330</guid></item>
<item><pubDate>Fri, 14 Aug 2026 12:09:11 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37312 – one assist ew at 99 up to 20k</title><description>&lt;div&gt;&lt;strong&gt;ranu – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;one assist ew at 99 up to 20k&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/ScratchService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/OrderController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37312&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37312&amp;peg=37330</guid></item>
<item><pubDate>Fri, 14 Aug 2026 00:45:30 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37311 – Scratch Offers code modify</title><description>&lt;div&gt;&lt;strong&gt;vikas – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Scratch Offers code modify&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/ScratchService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/bootstrap-multiselect.js&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37311&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37311&amp;peg=37330</guid></item>
<item><pubDate>Thu, 13 Aug 2026 20:53:52 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37310 – Scratch Offers now selects only active partners</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Scratch Offers now selects only active partners&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/scratch/ScratchController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37310&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37310&amp;peg=37330</guid></item>
<item><pubDate>Thu, 13 Aug 2026 18:48:00 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37309 – Scratch Offers now selects only active partners</title><description>&lt;div&gt;&lt;strong&gt;vikas – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Scratch Offers now selects only active partners&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/auth/LocationTrackingRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/auth/LocationTrackingRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/scratch/ScratchController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37309&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37309&amp;peg=37330</guid></item>
<item><pubDate>Thu, 13 Aug 2026 18:29:56 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37308 – DN receipt: reject on condition mismatch instead of silently reclassifying ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;DN receipt: reject on condition mismatch instead of silently reclassifying&lt;br /&gt;
&lt;br /&gt;
The receive screen defaulted the Condition dropdown to GOOD and receiveDebitNoteItems&lt;br /&gt;
overwrote purchase_return_item.type with whatever was submitted. A DOA return received&lt;br /&gt;
without touching the dropdown was rewritten BAD-&gt;GOOD, so on reject -&gt; acknowledge the&lt;br /&gt;
restoreInventory branch put the unit back into good (sellable) stock instead of bad.&lt;br /&gt;
UKHD948/57: IMEI 353243710802439 was declared DOA, rejected as &apos;wrong entry&apos;, restored&lt;br /&gt;
as good stock and resold at MOP 3h44m later.&lt;br /&gt;
&lt;br /&gt;
- receiveDebitNoteItems now compares each submitted condition against the stored one and&lt;br /&gt;
  rejects the WHOLE debit note on any mismatch (PRO + rejectReturn are both per-DN and&lt;br /&gt;
  there is no model for a partial receipt). PRO is still persisted so the receipt attempt&lt;br /&gt;
  stays on record, then stamped rejected; no scans, no refund, no IRN work.&lt;br /&gt;
- Removed the pri.setReturnType(rt) overwrite. Past the gate the submitted condition always&lt;br /&gt;
  equals the stored one, and applyReceipt already reads it off the entity. Rejected returns&lt;br /&gt;
  now keep the declared type, so restoreReturnedItems restores to the right bucket.&lt;br /&gt;
- New notifyReturnRejectedConditionMismatch: to partner, cc Logistics L2/L3, RBM L1/L2 and&lt;br /&gt;
  Sales L1 + first populated level in L2..L4. Sales ladder is sparse (L2 262 partners,&lt;br /&gt;
  L3 64, L4 1582 of 1524 open stores) so a fixed L2/L3 rule resolves to nobody for most.&lt;br /&gt;
- getTeamEmails now filters inactive users and dedupes. csService.getAuthUserByCategoryId&lt;br /&gt;
  (2-arg) does not filter active unlike its 1-arg sibling; fixed here rather than in&lt;br /&gt;
  CsServiceImpl because that overload has ~25 other call sites where dropping inactive&lt;br /&gt;
  users would change report scoping.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/PurchaseReturnNotificationService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/PurchaseReturnNotificationServiceImpl.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=37308&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37308&amp;peg=37330</guid></item>
<item><pubDate>Thu, 13 Aug 2026 18:04:41 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37307 – Block activation of item-less schemes (SELLIN/SELLOUT/SPECIAL_SUPPORT): validateSchemeHasItems guards activeSchemeById and ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Block activation of item-less schemes (SELLIN/SELLOUT/SPECIAL_SUPPORT): validateSchemeHasItems guards activeSchemeById and activeSchemeByIds, fixes /todayOfferList NPE caused by scheme 7877&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/scheme/SchemeServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37307&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37307&amp;peg=37330</guid></item>
<item><pubDate>Thu, 13 Aug 2026 18:04:36 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37306 – Block activation of item-less SELLIN/SELLOUT/SPECIAL_SUPPORT schemes: add SCHM_1009 response code</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Block activation of item-less SELLIN/SELLOUT/SPECIAL_SUPPORT schemes: add SCHM_1009 response code&lt;/div&gt;~ /trunk/profitmandi-common/src/main/resources/response-codes.properties&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37306&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37306&amp;peg=37330</guid></item>
<item><pubDate>Thu, 13 Aug 2026 17:44:34 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37305 – carry bag for silver at 1</title><description>&lt;div&gt;&lt;strong&gt;ranu – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;carry bag for silver at 1&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/CartServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2CartController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37305&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37305&amp;peg=37330</guid></item>
<item><pubDate>Thu, 13 Aug 2026 17:39:13 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37304 – v2 version some fixes</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;v2 version some fixes&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2CartController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37304&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37304&amp;peg=37330</guid></item>
<item><pubDate>Thu, 13 Aug 2026 15:52:50 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37303 – one assist ew at 99 up to 20k</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;one assist ew at 99 up to 20k&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/ScratchService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37303&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37303&amp;peg=37330</guid></item>
<item><pubDate>Thu, 13 Aug 2026 13:55:10 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37302 – Split refurbished (margin scheme) items into their own order at ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Split refurbished (margin scheme) items into their own order at placement&lt;br /&gt;
&lt;br /&gt;
Refurbished lines are invoiced on the RF- series, but only the partner checkout path&lt;br /&gt;
split them out. Internal POs and bulk orders raised a single mixed transaction, which&lt;br /&gt;
billed as one invoice on whichever series its first line happened to resolve to&lt;br /&gt;
(NSPJB2757, NSPJB3212, NSUPDL3898/3899/4365/4366).&lt;br /&gt;
&lt;br /&gt;
- PurchaseOrderServiceImpl: split a mixed internal PO into a regular PO and a margin&lt;br /&gt;
  scheme PO, each with its own PO number, PDF and internal transaction. External vendor&lt;br /&gt;
  POs raise no transaction, so they are left intact.&lt;br /&gt;
- BulkOrderService: raise one transaction per billing group, each with its own loan&lt;br /&gt;
  sized to the wallet balance left to it. Pricing, combo, credit availability and the&lt;br /&gt;
  first-PO gates still validate the order as a whole, so a split first PO cannot block&lt;br /&gt;
  its own second half.&lt;br /&gt;
- TransactionServiceImpl: drop the float narrowing of walletUsed in&lt;br /&gt;
  createTransactionForCartLines - the field is a double and the cart total is validated&lt;br /&gt;
  within 0.001, so any total carrying paise was rejected.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/order/BulkOrderService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/TransactionServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37302&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37302&amp;peg=37330</guid></item>
<item><pubDate>Thu, 13 Aug 2026 13:34:58 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37301 – one assist ew at 99 up to 20k</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;one assist ew at 99 up to 20k&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/ScratchService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37301&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37301&amp;peg=37330</guid></item>
<item><pubDate>Wed, 12 Aug 2026 23:56:14 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37300 – one assist ew at 99 up to 20k</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;one assist ew at 99 up to 20k&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/oneassist/OneAssistService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37300&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37300&amp;peg=37330</guid></item>
<item><pubDate>Wed, 12 Aug 2026 23:32:17 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37299 – scratch offer live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;scratch offer live&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/ScratchService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37299&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37299&amp;peg=37330</guid></item>
<item><pubDate>Wed, 12 Aug 2026 22:10:01 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37298 – Default subCategoryId to 0 on endpoints that declare it required=false ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Default subCategoryId to 0 on endpoints that declare it required=false&lt;br /&gt;
&lt;br /&gt;
subCategoryId is a primitive int, so a required=false declaration with no&lt;br /&gt;
defaultValue makes Spring throw when the param is omitted:&lt;br /&gt;
&lt;br /&gt;
  Optional int parameter &apos;subCategoryId&apos; is present but cannot be translated&lt;br /&gt;
  into a null value due to being declared as a primitive type.&lt;br /&gt;
&lt;br /&gt;
v1 DealsController and GuestController already default it to 0; their v2&lt;br /&gt;
wrappers dropped that, and StoreController never had it on either version. Any&lt;br /&gt;
caller omitting the param got a 500 with a message that does not name the&lt;br /&gt;
parameter at fault.&lt;br /&gt;
&lt;br /&gt;
Adding the default only removes that failure path — every currently working&lt;br /&gt;
caller already sends a value, so no existing behaviour changes.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/StoreController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2DealsController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2GuestController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2StoreController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37298&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37298&amp;peg=37330</guid></item>
<item><pubDate>Wed, 12 Aug 2026 15:32:19 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37297 – 13 to 16 ew at 99 rs u to 20k</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;13 to 16 ew at 99 rs u to 20k&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/oneassist/OneAssistService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37297&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37297&amp;peg=37330</guid></item>
<item><pubDate>Wed, 12 Aug 2026 15:26:22 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37296 – external api v2: docs - color removed from all record ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;external api v2: docs - color removed from all record shapes&lt;/div&gt;~ /trunk/profitmandi-web/src/main/resources/external-api-docs.html&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37296&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37296&amp;peg=37330</guid></item>
<item><pubDate>Wed, 12 Aug 2026 15:26:21 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37295 – external api v2: never expose item color on partner APIs ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;external api v2: never expose item color on partner APIs (filter at API layer; catalog.item untouched)&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/external/CatalogSkuModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/external/StoreSkuModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/external/ExternalFeedRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/external/ExternalApiServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37295&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37295&amp;peg=37330</guid></item>
<item><pubDate>Wed, 12 Aug 2026 13:07:21 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37294 – all active brand in hot deals</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;all active brand in hot deals&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/partner-readonly-info.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37294&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37294&amp;peg=37330</guid></item>
<item><pubDate>Wed, 12 Aug 2026 11:58:47 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37293 – Fix region-ALL (fofoId=0 sentinel) handling on RBM home  active-offers: ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix region-ALL (fofoId=0 sentinel) handling on RBM home&lt;br /&gt;
&lt;br /&gt;
active-offers: regionId resolved via rows.get(0).getFofoId(), which is 0 for&lt;br /&gt;
region ALL, so selectByRetailerId(0) threw FOFOSTR_1000 &apos;Fofo store not found&apos;&lt;br /&gt;
(400) for every region-ALL user. Now filters fofoId&gt;0, picks an active store,&lt;br /&gt;
and falls back to the caller&apos;s fofoId when a region resolves to nothing.&lt;br /&gt;
&lt;br /&gt;
rbm-regions: dropdown now lists only regions holding an active retailer (with&lt;br /&gt;
activePartners count), which drops the ALL pseudo-region; users carrying the&lt;br /&gt;
sentinel get every live region as assignedRegionIds instead of an empty set.&lt;br /&gt;
&lt;br /&gt;
rbm-dashboard: expand the sentinel like CsServiceImpl does (row region -&gt;&lt;br /&gt;
its partners; region ALL -&gt; all active stores) so the partners tile stops&lt;br /&gt;
reporting 0/1. Scope-wide batches limited to stores/targets/purchases/&lt;br /&gt;
last-billed; name, wallet and loan lookups now run only over the returned&lt;br /&gt;
slice. partners and alerts capped via ?limit (default 50, max 200) with&lt;br /&gt;
partnersReturned/totalAlerts/alertsReturned/limit added to summary. Partners&lt;br /&gt;
with no target this month rank after those actually missing a target, so the&lt;br /&gt;
capped slice is not filled by unset-target stores.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoMonitorController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoOfferController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37293&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37293&amp;peg=37330</guid></item>
<item><pubDate>Tue, 11 Aug 2026 15:59:29 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37292 – Hot deals: javadoc matches reindex-based sync  syncHotDealFlags no longer ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hot deals: javadoc matches reindex-based sync&lt;br /&gt;
&lt;br /&gt;
syncHotDealFlags no longer mirrors model_hot_deal into tag_listing.hot_deals;&lt;br /&gt;
since r37276 hot_deal_b is derived from the active window at index time, so the&lt;br /&gt;
daily job re-indexes models whose window opened today or closed yesterday.&lt;br /&gt;
Comment-only, no behaviour change.&lt;/div&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/ScheduledTasks.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37292&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37292&amp;peg=37330</guid></item>
<item><pubDate>Tue, 11 Aug 2026 11:39:19 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37291 – external api v2: docs - parameters-at-a-glance table, per-endpoint optional/required params, ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;external api v2: docs - parameters-at-a-glance table, per-endpoint optional/required params, clamp semantics&lt;/div&gt;~ /trunk/profitmandi-web/src/main/resources/external-api-docs.html&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37291&amp;peg=37330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37291&amp;peg=37330</guid></item>
</channel></rss>