<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SmartDukaan &#x2013; /trunk/profitmandi-common/src/main/java/</title><description>WebSVN RSS feed &#x2013; SmartDukaan</description><lastBuildDate>Wed, 30 Sep 2026 08:19:22 +0530</lastBuildDate><generator>WebSVN 2.8.6-DEV</generator><language>en</language><link>https://svn.smartdukaan.com/log.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;max=40&amp;</link><atom:link href="https://svn.smartdukaan.com/rss.php?isdir=1&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Mon, 28 Sep 2026 18:57:23 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37800 – offer-radar notification commit</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;offer-radar notification commit&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/ProfitMandiConstants.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37800</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37800</guid></item>
<item><pubDate>Mon, 28 Sep 2026 17:51:31 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37799 – offer-radar notification commit</title><description>&lt;div&gt;&lt;strong&gt;ranu – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;offer-radar notification commit&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/ProfitMandiConstants.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/OfferRadarNotificationController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37799</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37799</guid></item>
<item><pubDate>Mon, 28 Sep 2026 15:38:57 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37794 – offer-radar notification commit</title><description>&lt;div&gt;&lt;strong&gt;ranu – 8 file(s) modified&lt;/strong&gt;&lt;br/&gt;offer-radar notification commit&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/ProfitMandiConstants.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/BotPenguinWhatsappService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappFlow.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/OfferRadarNotificationController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/offer_history.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/schemes.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37794</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37794</guid></item>
<item><pubDate>Mon, 28 Sep 2026 13:25:51 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37789 – FormattingUtils.formatDigit: print whole numbers, as intended  digitFormatter set the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;FormattingUtils.formatDigit: print whole numbers, as intended&lt;br /&gt;
&lt;br /&gt;
digitFormatter set the MINIMUM fraction digits twice and never set the&lt;br /&gt;
maximum, so Java&apos;s default of 3 applied: formatDigit(84745.76f) rendered&lt;br /&gt;
&quot;84,745.758&quot; - float noise at three decimals - where a whole number was&lt;br /&gt;
meant. The second call was clearly a typo for setMaximumFractionDigits(0).&lt;br /&gt;
&lt;br /&gt;
Only one other call site (ItemCriteria &quot;with Selling Price &gt;= ...&quot;), which&lt;br /&gt;
passes whole rupees and is unaffected. Needed by the B2C return refund,&lt;br /&gt;
which prints whole-rupee amounts on screen and in mails.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/FormattingUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37789</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37789</guid></item>
<item><pubDate>Thu, 24 Sep 2026 18:54:04 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37768 – feat(supplier): GstinUtil - read state code / PAN from a ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(supplier): GstinUtil - read state code / PAN from a GSTIN so the GSTIN decides a supplier&apos;s state&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/GstinUtil.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37768</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37768</guid></item>
<item><pubDate>Mon, 21 Sep 2026 12:32:52 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37730 – Remove dead third-party integrations: common  Part of the integrations ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 6 file(s) modified&lt;/strong&gt;&lt;br/&gt;Remove dead third-party integrations: common&lt;br /&gt;
&lt;br /&gt;
Part of the integrations cleanup across all modules. Nothing here had a&lt;br /&gt;
live caller.&lt;br /&gt;
&lt;br /&gt;
- Snapdeal product-page parser and UserMessagePojo (affiliate live pricing)&lt;br /&gt;
- FundFina request/response DTOs (inbound lender API, removed)&lt;br /&gt;
- Aramex XML tracking client (only reachable via /track provider=2)&lt;br /&gt;
- WiseApp insurance model&lt;br /&gt;
- URL constants for PayU, the SmartPing caller-ID hook, affiliate clicks and&lt;br /&gt;
  live pricing; the SmartPing agent map&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/ProfitMandiConstants.java&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/UserMessagePojo.java&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/WiseAppInsuaranceModel.java&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/AramexTrackingService.java&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/fundfina&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/SnapdealProductPageParser.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37730</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37730</guid></item>
<item><pubDate>Thu, 17 Sep 2026 13:12:56 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37672 – Add BrowserLane: machine-wide interlock so only one headless Chrome runs ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add BrowserLane: machine-wide interlock so only one headless Chrome runs at a time&lt;br /&gt;
&lt;br /&gt;
Every ChromeDriver tree on the app box costs ~850MB RSS, on a host holding a&lt;br /&gt;
-Xmx8g tomcat and a -Xmx2g cron jar on 16GB that has been kernel-OOM-killed&lt;br /&gt;
twice with tomcat the victim. Peak concurrent drivers is the number that&lt;br /&gt;
matters, not drivers per day.&lt;br /&gt;
&lt;br /&gt;
Measured on the oppo/realme lane: a 25-imei chunk takes 505s (12s driver&lt;br /&gt;
startup, then ~19.7s an imei) against a fixed 20s fixedDelay, i.e. a 96% duty&lt;br /&gt;
cycle. Meanwhile tomcat starts its own driver 8 times a day for the knowlarity&lt;br /&gt;
scrape. On 17-Sep that scrape ran 11:40:00-11:41:07 and the lane&apos;s next driver&lt;br /&gt;
came up at 11:42:21 -- it cleared by 74 seconds, by luck. At a 96% duty cycle&lt;br /&gt;
the collision cannot be dodged by choosing better times, only by serialising.&lt;br /&gt;
&lt;br /&gt;
The two JVMs are separate processes owned by different users, so an in-process&lt;br /&gt;
flag cannot see across the boundary. Uses an OS file lock at&lt;br /&gt;
/var/lock/sd-browser.lock (overridable via -Dsd.browser.lock), created 0666 on&lt;br /&gt;
first use because cron runs as root and tomcat as tomcat and whichever starts&lt;br /&gt;
first creates it. A file lock rather than a marker file so the kernel reclaims&lt;br /&gt;
it when the holder dies: verified by SIGKILLing the holder mid-hold, the next&lt;br /&gt;
JVM acquired in 264ms. A ReentrantLock gates it first, since a second thread in&lt;br /&gt;
the same JVM would otherwise get OverlappingFileLockException rather than block.&lt;br /&gt;
&lt;br /&gt;
Callers wait rather than skip. The knowlarity scrape needs 67s against a lane&lt;br /&gt;
busy 96% of the time, so skip-on-contention would mean it essentially never&lt;br /&gt;
refreshed again. Eight scrapes a day costs the imei lane about nine minutes of&lt;br /&gt;
waiting in total.&lt;br /&gt;
&lt;br /&gt;
Fails open if the lock file is unusable (missing /var/lock, read-only mount, dev&lt;br /&gt;
laptop): serialising within the JVM only, rather than stopping imei activation&lt;br /&gt;
over what is a safety interlock.&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/BrowserLane.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37672</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37672</guid></item>
<item><pubDate>Wed, 16 Sep 2026 20:29:34 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37668 – Validate GSTIN shape, state code and checksum  isValidGstNumber accepted ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Validate GSTIN shape, state code and checksum&lt;br /&gt;
&lt;br /&gt;
isValidGstNumber accepted any 15-character string, so a pincode (110095, rejected only for&lt;br /&gt;
length) and junk (Hdjiekwbdbsjskz) reached fofo_store.gst_number, which billing sends to NIC&lt;br /&gt;
as the recipient - the invoice is then refused and the goods cannot ship.&lt;br /&gt;
&lt;br /&gt;
Now: 2-digit state code + PAN + entity + Z + mod-36 check digit, trimmed and upper-cased.&lt;br /&gt;
Blank still passes (the field is optional); callers needing one present check that themselves.&lt;br /&gt;
Checked against live data: 1,569 of 1,570 well-formed partner GSTINs pass, the one that fails&lt;br /&gt;
(HRSP330) has a genuinely wrong check digit.&lt;br /&gt;
&lt;br /&gt;
Adds RTLR_1020 / RTLR_1021 for the invalid and mismatched cases.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/StringUtils.java&lt;br /&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=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37668</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37668</guid></item>
<item><pubDate>Wed, 16 Sep 2026 18:56:29 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37665 – Hot Deal brand: optional categoryId on the brand facet, so ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hot Deal brand: optional categoryId on the brand facet, so the chips can be scoped to one tab&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/solr/SolrService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37665</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37665</guid></item>
<item><pubDate>Wed, 16 Sep 2026 18:10:20 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37661 – Fix trunk: RestClient was left behind by r37655  r37655 ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix trunk: RestClient was left behind by r37655&lt;br /&gt;
&lt;br /&gt;
r37655 deleted MandiiResponse but omitted RestClient from the commit, so&lt;br /&gt;
trunk did not compile - RestClient still imported the deleted class.&lt;br /&gt;
&lt;br /&gt;
RestClient now uses RawHttpResponse: executeMandii is renamed executeRaw and&lt;br /&gt;
postWithResponse returns the new type. The dead getMandii helper is removed;&lt;br /&gt;
its only caller was MandiiService.&lt;/div&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=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37661</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37661</guid></item>
<item><pubDate>Wed, 16 Sep 2026 17:14:44 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37655 – Remove the dead Mandii BNPL integration (common)  Mandii has ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 21 file(s) modified&lt;/strong&gt;&lt;br/&gt;Remove the dead Mandii BNPL integration (common)&lt;br /&gt;
&lt;br /&gt;
Mandii has taken no payment since 2022-08-23 and holds no credit account, so&lt;br /&gt;
MandiiService and the 29 classes only it used are deleted.&lt;br /&gt;
&lt;br /&gt;
The package had become a home for live types, which are moved out rather than&lt;br /&gt;
lost: Gender/MaritalStatus/AddressProofType -&gt; services.kyc (they back&lt;br /&gt;
@Enumerated columns on user.fofo_kyc, 317 rows), and the SD Credit account&lt;br /&gt;
status model - AccountStatusResponseOut and its 10 dependencies -&gt; &lt;br /&gt;
services.sdcredit, still served by GatewayController for SDDIRECT.&lt;br /&gt;
&lt;br /&gt;
MandiiResponse was a generic body+status holder named after the integration;&lt;br /&gt;
renamed RawHttpResponse, still used by RestClient for Kommuno recordings.&lt;br /&gt;
Its dead getMandii() helper is gone. AccountStatusResponseOut no longer&lt;br /&gt;
carries the hardcoded merchant.mandii.com URL it shipped to the app.&lt;br /&gt;
&lt;br /&gt;
FundfinaService was logging under MandiiService.class - fixed.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/FofoKycModel.java&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/MandiiResponse.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/RawHttpResponse.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/fundfina/FundfinaService.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/kyc&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/kyc/AddressProofType.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/AddressProofType.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/kyc/Gender.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/Gender.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/kyc/MaritalStatus.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/MaritalStatus.java@37654)&lt;/i&gt;&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/AccountStatusResponseOut.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/AccountStatusResponseOut.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/CurrentStageEnum.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/CurrentStageEnum.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/Details.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/Details.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/Documents.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/Documents.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/DocumentStatusEnum.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/DocumentStatusEnum.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/DocumentTypesEnum.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/DocumentTypesEnum.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/EligibilityStatusEnum.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/EligibilityStatusEnum.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/RepaymentDetails.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/RepaymentDetails.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/VirtualAccountDetails.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/VirtualAccountDetails.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/VirtualBankAccount.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/VirtualBankAccount.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/VirtualUPI.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/VirtualUPI.java@37654)&lt;/i&gt;&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37655</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37655</guid></item>
<item><pubDate>Tue, 15 Sep 2026 17:38:50 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37638 – Hot Deal brand: HOT_DEAL_BRAND constant, oem_brand_s facet and hot-deal brand ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hot Deal brand: HOT_DEAL_BRAND constant, oem_brand_s facet and hot-deal brand filter routing&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/ProfitMandiConstants.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/solr/SolrService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37638</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37638</guid></item>
<item><pubDate>Tue, 15 Sep 2026 13:15:59 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37627 – feat(mail): drop inactive recipients before send  Add MailRecipientFilter and ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(mail): drop inactive recipients before send&lt;br /&gt;
&lt;br /&gt;
Add MailRecipientFilter and RecipientFilteringMailSender, which strips To/Cc/Bcc addresses the filter reports inactive and skips a mail left with no recipients instead of failing. AuthenticatedIdentityMailSender now extends it.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/AuthenticatedIdentityMailSender.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/MailRecipientFilter.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/RecipientFilteringMailSender.java&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/services&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/services/RecipientFilteringMailSenderTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37627</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37627</guid></item>
<item><pubDate>Mon, 14 Sep 2026 17:08:47 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37619 – Return active_b in the unlimited content search  The offer ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Return active_b in the unlimited content search&lt;br /&gt;
&lt;br /&gt;
The offer screen&apos;s model picker needs to mark delisted models as inactive when&lt;br /&gt;
it is asked to include them. The other unlimited-search callers read only&lt;br /&gt;
catalogId_i and title_s, so the extra field changes nothing for them.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/solr/SolrService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37619</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37619</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:47:46 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37514 – notification live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/enumuration/ScheduleStatus.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37514</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37514</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:46:42 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37513 – notification live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/NotificationTargetCriteria.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/NotificationSchedule.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationScheduleRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationScheduleRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/js/notification-calendar.js&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/notification-calendar.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37513</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37513</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:41:08 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37512 – notification live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/LinkedEntity.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37512</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37512</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:40:18 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37511 – notification live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/enumuration/NotificationFormat.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37511</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37511</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:38:33 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37509 – rbm drr dashboard , all today po rbm view maped</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard , all today po rbm view maped&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/enumuration/NotificationCategory.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37509</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37509</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:12:41 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37508 – notification live new ....api and modification , ui</title><description>&lt;div&gt;&lt;strong&gt;ranu – 11 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live new ....api and modification , ui&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/Notification.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/SendNotificationModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/NotificationCampaign.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SimpleCampaignParams.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationCampaignRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationCampaignRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/NotificationController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/send-notification.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/send-notification.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37508</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37508</guid></item>
<item><pubDate>Tue, 01 Sep 2026 12:20:10 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37490 – errors: separate business, integration and bug -- three failures logged ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;errors: separate business, integration and bug -- three failures logged three ways&lt;br /&gt;
&lt;br /&gt;
Everything was logged identically: ERROR, titled &apos;Internal Server Error&apos;, and in&lt;br /&gt;
web stack-traced twice (log4j2 plus printStackTrace, the second copy landing in&lt;br /&gt;
catalina.out). A partner mistyping an IMEI produced the same output as a&lt;br /&gt;
NullPointerException.&lt;br /&gt;
&lt;br /&gt;
That makes the error stream unalertable. Measured over six hours across web and&lt;br /&gt;
fofo: 909 ERROR lines, of which 294 (32%) were ProfitMandiBusinessException --&lt;br /&gt;
HTTP 400s where the user is simply told what to fix. Any rule on ERROR rate&lt;br /&gt;
fires constantly, and an error tracker would rank &apos;insufficient balance&apos; as the&lt;br /&gt;
top issue.&lt;br /&gt;
&lt;br /&gt;
  business    WARN,  no stack trace, 4xx  -- expected, user-correctable&lt;br /&gt;
  integration ERROR + dependency name     -- ours is fine, theirs is not&lt;br /&gt;
  anything else ERROR + stack trace, 500  -- a bug&lt;br /&gt;
&lt;br /&gt;
New IntegrationException carries getDependency(), so two hundred failures of one&lt;br /&gt;
gateway group as one problem rather than two hundred unrelated traces. That&lt;br /&gt;
category did not exist: such failures were previously either a bare Exception&lt;br /&gt;
(indistinguishable from our own bug) or a business exception (which wrongly&lt;br /&gt;
blames the user).&lt;br /&gt;
&lt;br /&gt;
printStackTrace removed from the web handler -- it was writing a second copy of&lt;br /&gt;
every trace to catalina.out.&lt;br /&gt;
&lt;br /&gt;
Prerequisite for wiring the GlitchTip appender, which must not be attached until&lt;br /&gt;
ERROR means something.&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/exception/IntegrationException.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/GlobalExceptionHandler.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/GlobalExceptionHandler.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37490</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37490</guid></item>
<item><pubDate>Mon, 31 Aug 2026 19:34:41 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37489 – Restore Utils.html and Utils.htmlJson removed by r37477  r37477 reorganised ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Restore Utils.html and Utils.htmlJson removed by r37477&lt;br /&gt;
&lt;br /&gt;
r37477 reorganised Utils while consolidating the mail APIs and dropped its only two&lt;br /&gt;
instance methods. They have no Java callers -- they exist solely for Velocity, where&lt;br /&gt;
AppConfig binds new Utils() as $vmUtils -- so the compiler, IDE find-usages and any&lt;br /&gt;
grep over *.java all reported them dead.&lt;br /&gt;
&lt;br /&gt;
With htmlJson gone, data-paramslist=&quot;$vmUtils.htmlJson(...)&quot; stopped rendering usable&lt;br /&gt;
JSON on every report link (admin.vm:840, admin.vm:910, reports.vm:51). reports.js:7&lt;br /&gt;
then read $(this).data(&quot;paramslist&quot;) as undefined and returned true, letting the&lt;br /&gt;
browser follow the plain &amp;lt;a href&gt; natively -- a GET against the @PostMapping&lt;br /&gt;
/reports/{projectName}/{fileName} (ReportsController:126), answered with GE_1007&lt;br /&gt;
&quot;Request method &apos;GET&apos; not supported&quot;. The modal POST path was the only way that&lt;br /&gt;
endpoint was ever reachable, so every partner report broke at once.&lt;br /&gt;
&lt;br /&gt;
Confirmed against prod: zero occurrences in fofo.log for Aug 13/20/26/28/30, and 87&lt;br /&gt;
today starting 18:37:23, right after today&apos;s ROOT.war deploy. 13 distinct reports hit.&lt;br /&gt;
&lt;br /&gt;
$vmUtils.html had two further callers that also come back:&lt;br /&gt;
offer_margin_detail_partner.vm:12 and :241 (offer description and notes).&lt;br /&gt;
&lt;br /&gt;
Restored verbatim from r37476, and commented as template-only so the next refactor&lt;br /&gt;
does not read them as dead code again.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/Utils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37489</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37489</guid></item>
<item><pubDate>Mon, 31 Aug 2026 17:38:48 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37477 – mail: one way to send mail, and nothing sends inline ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 8 file(s) modified&lt;/strong&gt;&lt;br/&gt;mail: one way to send mail, and nothing sends inline&lt;br /&gt;
&lt;br /&gt;
There were three overlapping APIs -- Utils.sendMail* (7 static overloads),&lt;br /&gt;
EmailServiceImpl.sendMail* (7 more) and MailOutboxService.queueMail* (20). The&lt;br /&gt;
first two built their own MimeMessage, hardcoded From: &lt;a href=&quot;mailto:noreply@smartdukaan.com&quot;&gt;noreply@smartdukaan.com&lt;/a&gt;&lt;br /&gt;
in eleven places, and pushed straight down whichever JavaMailSender the caller&lt;br /&gt;
passed.&lt;br /&gt;
&lt;br /&gt;
That From is why mail was refused: an authenticated Workspace session may send&lt;br /&gt;
only as the account it logged in as, and noreply@ is a different identity in the&lt;br /&gt;
same domain. Sending inline also meant a failed send was lost outright and took&lt;br /&gt;
the calling job down with it, which is how one expired credential came to mark&lt;br /&gt;
ten report jobs FAILED.&lt;br /&gt;
&lt;br /&gt;
New in profitmandi-common:&lt;br /&gt;
  MailQueue      - the single entry point; queue() returns once the mail is&lt;br /&gt;
                   recorded, not once it is sent&lt;br /&gt;
  MailRequest    - one value object replacing the 34 overloads&lt;br /&gt;
  MailSenderType - GOOGLE (authenticated, From rewritten) or RELAY (IP-authorised)&lt;br /&gt;
&lt;br /&gt;
The interface lives in common while MailOutboxService implements it in dao,&lt;br /&gt;
because dao depends on common and not the reverse -- Utils and EmailService&lt;br /&gt;
could not otherwise reach the outbox at all.&lt;br /&gt;
&lt;br /&gt;
Utils and EmailService keep their signatures so the ~38 call sites still&lt;br /&gt;
compile, but now delegate and ignore the JavaMailSender argument; choosing a&lt;br /&gt;
transport was never the caller&apos;s business. Both are marked deprecated.&lt;br /&gt;
MailQueueHolder bridges the static helpers to the bean and is documented as a&lt;br /&gt;
compromise, not a pattern.&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/mail&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/mail/MailQueue.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/mail/MailQueueHolder.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/mail/MailRequest.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/mail/MailSenderType.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/EmailService.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/EmailServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/Utils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37477</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37477</guid></item>
<item><pubDate>Mon, 31 Aug 2026 11:09:10 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37463 – Add aged-stock constants for Apple credit-limit haircut  Apple handsets ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add aged-stock constants for Apple credit-limit haircut&lt;br /&gt;
&lt;br /&gt;
Apple handsets held by a partner beyond AGED_STOCK_APPLE_DAYS (30) days&lt;br /&gt;
from GRN are excluded from the investment used to suggest a credit limit.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/ProfitMandiConstants.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37463</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37463</guid></item>
<item><pubDate>Sat, 29 Aug 2026 07:42:55 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37456 – Block billing when NIC rejects the transporter GSTIN for e-way ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 6 file(s) modified&lt;/strong&gt;&lt;br/&gt;Block billing when NIC rejects the transporter GSTIN for e-way bills&lt;br /&gt;
&lt;br /&gt;
NIC files the e-way bill alongside the IRN, so a deregistered transporter&lt;br /&gt;
GSTIN returns Status=1 with InfoDtls[InfCd=EWBERR] (3029 &quot;GSTIN - ... is&lt;br /&gt;
not active&quot;): the IRN is valid while ewb_no stays null. Nothing downstream&lt;br /&gt;
reads that as a failure, so invoices kept being issued for goods that&lt;br /&gt;
could not legally move.&lt;br /&gt;
&lt;br /&gt;
Cache the rejected transporter GSTIN in Redis and refuse to bill through&lt;br /&gt;
it. The block is keyed on the GSTIN, since one GSTIN is shared by several&lt;br /&gt;
warehouse_provider rows, and it carries the day it was raised so it lapses&lt;br /&gt;
at midnight and each new day re-tests NIC once. Correcting the GSTIN in&lt;br /&gt;
the provider panel lifts it immediately.&lt;br /&gt;
&lt;br /&gt;
Only errors that are the transporter&apos;s fault block billing - NIC&apos;s 3029,&lt;br /&gt;
or any message naming the GSTIN we sent as TransId. Every other EWBERR&lt;br /&gt;
behaves as before: the IRN is filed and the e-way bill is retried later.&lt;br /&gt;
&lt;br /&gt;
Guard sits in addBillingDetailsForGrouppedOrders before the pessimistic&lt;br /&gt;
lock and before any mutation, mirroring LogisticsServiceImpl#getEwbDetails&lt;br /&gt;
(order&apos;s own warehouse; self-pickup and runner skipped, as they travel on&lt;br /&gt;
a vehicle number rather than a transporter id).&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/ProfitMandiConstants.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/EwbTransporterFailureCache.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/TransactionServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/integrations/gstpro/EwbTransporterFailureCacheTest.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/provider/ProviderController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37456</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37456</guid></item>
<item><pubDate>Sat, 29 Aug 2026 07:24:19 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37451 – Send authenticated mail as the account that actually authenticates  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Send authenticated mail as the account that actually authenticates&lt;br /&gt;
&lt;br /&gt;
googleMailSender logs in to smtp.gmail.com as &lt;a href=&quot;mailto:sdtech@smartdukaan.com&quot;&gt;sdtech@smartdukaan.com&lt;/a&gt;, but callers&lt;br /&gt;
build their From as &lt;a href=&quot;mailto:noreply@smartdukaan.com&quot;&gt;noreply@smartdukaan.com&lt;/a&gt;. Google Workspace binds an authenticated&lt;br /&gt;
session to one identity and refuses the mismatch with 535 &apos;Authorization failed:&lt;br /&gt;
Authenticated user is not authorized to send mail&apos; - the password is accepted, the&lt;br /&gt;
message is not. Every alert routed through that sender was therefore lost at the SMTP&lt;br /&gt;
layer, the e-invoice failure alert for NSUPHR1770 among them.&lt;br /&gt;
&lt;br /&gt;
AuthenticatedIdentityMailSender rewrites From to the sender&apos;s own username at send&lt;br /&gt;
time, keeping whatever display name the caller chose. Senders that do not authenticate&lt;br /&gt;
are left alone: gmailRelaySender is the IP-authorised relay and has no username, and&lt;br /&gt;
sendGridMailSender&apos;s username is the literal &apos;apikey&apos;, so both keep noreply@.&lt;br /&gt;
&lt;br /&gt;
Enforced in the sender rather than at the ~40 call sites that build their own&lt;br /&gt;
MimeMessage and hardcode noreply@, so it covers the ones added next too.&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/AuthenticatedIdentityMailSender.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37451</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37451</guid></item>
<item><pubDate>Wed, 26 Aug 2026 13:03:25 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37409 – Changed WhatsApp service to botpenguin (DigiWaha)</title><description>&lt;div&gt;&lt;strong&gt;vikas – 18 file(s) modified&lt;/strong&gt;&lt;br/&gt;Changed WhatsApp service to botpenguin (DigiWaha)&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/ProfitMandiConstants.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/BidService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/BidServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/LiquidationService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/BotPenguinPayloads.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/BotPenguinWhatsappService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappFlow.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappNumbers.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/resources/shared-prod.properties&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/resources/shared-staging.properties&lt;br /&gt;~ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/whatsapp/WhatsappNumbersTest.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/catalog/LiquidationController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/UpSaleController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/resources/META-INF/dev.properties&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/resources/META-INF/prod.properties&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37409</guid></item>
<item><pubDate>Tue, 25 Aug 2026 22:59:41 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37403 – Add the canonical state list URL constant  Serves inventory.statemaster ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add the canonical state list URL constant&lt;br /&gt;
&lt;br /&gt;
Serves inventory.statemaster to clients so none of them carry their own copy.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/ProfitMandiConstants.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37403</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37403</guid></item>
<item><pubDate>Tue, 25 Aug 2026 20:29:58 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37397 – Consolidate insurance invoice line rendering; drop dead thermal-printing path  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Consolidate insurance invoice line rendering; drop dead thermal-printing path&lt;br /&gt;
&lt;br /&gt;
Remove the unused 58/80mm thermal chain (InvoiceFormatter, PrinterType and the&lt;br /&gt;
PrinterType overload of generateAndWrite) - its only caller was a commented-out&lt;br /&gt;
endpoint, and it bypassed the insurance line folding in DocumentData.items().&lt;br /&gt;
&lt;br /&gt;
Drop generateMarginSchemeInvoice, a no-op alias for generateInvoiceV2 with no&lt;br /&gt;
production callers.&lt;/div&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/InvoiceFormatter.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PrinterType.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37397</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37397</guid></item>
<item><pubDate>Mon, 24 Aug 2026 16:49:11 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37388 – Whatsapp Apis</title><description>&lt;div&gt;&lt;strong&gt;vikas – 28 file(s) modified&lt;/strong&gt;&lt;br/&gt;Whatsapp Apis&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/ProfitMandiConstants.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/web/client/RestClient.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/BotPenguinPayloads.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/BotPenguinTemplateInfo.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/BotPenguinWhatsappService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/CpassWhatsappService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/GupshupWhatsappService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappFlow.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappNumbers.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappProvider.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappProviderResolver.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappTemplateComponent.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappTemplateParam.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappTemplateRequest.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappTemplateSender.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/resources/shared-prod.properties&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/resources/shared-staging.properties&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/whatsapp&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/whatsapp/BotPenguinPayloadTest.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/whatsapp/BotPenguinResponseTest.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/whatsapp/BotPenguinTemplateResolutionTest.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/whatsapp/WhatsappNumbersTest.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/whatsapp/WhatsappProviderResolverTest.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/config/WebMVCConfig.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/BeatTrackingController.java&lt;br /&gt;+ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/BotPenguinTestController.java&lt;br /&gt;+ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/BotPenguinWebhookController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37388</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37388</guid></item>
<item><pubDate>Fri, 21 Aug 2026 15:27:23 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37379 – Restore insurance lines on invoice PDFs dropped by the r37066 ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 8 file(s) modified&lt;/strong&gt;&lt;br/&gt;Restore insurance lines on invoice PDFs dropped by the r37066 renderer refactor&lt;br /&gt;
&lt;br /&gt;
The modular doc-generation extraction moved the item table into ItemsTableSection,&lt;br /&gt;
which iterates only DocumentData.items() -&gt; model.getOrderItems(). The legacy&lt;br /&gt;
renderer also emitted a row per CustomInsurancePolicy (PdfUtils r36674, lines&lt;br /&gt;
241-261); that block was lost in the extraction and nothing consumed&lt;br /&gt;
getInsurancePolicies() any more.&lt;br /&gt;
&lt;br /&gt;
Effect: an extended-warranty policy is not a catalog item, so it has no&lt;br /&gt;
fofo_order_item row. Insurance sold after the device sale gets its own invoice&lt;br /&gt;
whose only line is the policy, so the whole table came out empty and the totals&lt;br /&gt;
- which SummarySection derives from the table, not from FofoOrder.totalAmount -&lt;br /&gt;
printed as 0.00 / &apos;Zero Rupees Only&apos; (e.g. HRJND1424/94). On a combined&lt;br /&gt;
device+insurance invoice the policy line vanished silently and the invoice total&lt;br /&gt;
and GST were understated by the premium. InsuranceController&apos;s insurer document&lt;br /&gt;
pack, whose model carries policies and no order items at all, hit an NPE.&lt;br /&gt;
&lt;br /&gt;
Fold the policies in at DocumentData.items(), the single accessor every section&lt;br /&gt;
reads, so the fix covers all callers at once. Column mapping mirrors the legacy&lt;br /&gt;
renderer: quantity 1, no discount, taxable value repeated in the Rate column.&lt;br /&gt;
Only the applicable tax side is populated (CGST/SGST or IGST) rather than both&lt;br /&gt;
as the policy model carries them, matching how real order items are built, so&lt;br /&gt;
ItemsTableSection&apos;s taxAmount = cgst+sgst+igst stays correct on margin-scheme&lt;br /&gt;
invoices. With no policies the model&apos;s own list is returned untouched.&lt;br /&gt;
&lt;br /&gt;
Tests: InsuranceInvoiceRenderTest asserts on extracted PDF text (insurance-only,&lt;br /&gt;
intra/inter-state GST split, combined invoice, and a no-insurance control), so it&lt;br /&gt;
holds on any machine unlike the pixel goldens; three golden baselines added.&lt;br /&gt;
Verified all 14 pre-existing golden fixtures render byte-identical before and&lt;br /&gt;
after.&lt;br /&gt;
&lt;br /&gt;
Also set java.awt.headless=true on the test JVM: the golden harness rasterizes&lt;br /&gt;
through PDFBox, whose font handling calls&lt;br /&gt;
GraphicsEnvironment.getLocalGraphicsEnvironment() and made the forked JVM attach&lt;br /&gt;
to the macOS window server as a Foreground app, stealing focus on every run.&lt;br /&gt;
Test-only property, no effect on the built war.&lt;/div&gt;~ /trunk/profitmandi-common/build.gradle&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/DocumentData.java&lt;br /&gt;~ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document/golden/GoldenInvoiceV2Test.java&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document/golden/InsuranceInvoiceRenderTest.java&lt;br /&gt;~ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document/golden/PdfFixtures.java&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/v2-insurance-combined-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/v2-insurance-only-inter-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/v2-insurance-only-p0.png&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37379</guid></item>
<item><pubDate>Wed, 19 Aug 2026 20:30:18 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37359 – ICICI proposal read timeout: add insurance-issuance HTTP config + shared ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;ICICI proposal read timeout: add insurance-issuance HTTP config + shared transport-failure classifier&lt;br /&gt;
&lt;br /&gt;
The default RestClient carries a 10s socket timeout, sized for quick lookups. ICICI&apos;s&lt;br /&gt;
gadget proposal endpoint underwrites and issues the policy synchronously and needs&lt;br /&gt;
longer; abandoning the read discards the only response carrying the policy and&lt;br /&gt;
proposal numbers for a policy that is already live at the insurer.&lt;br /&gt;
&lt;br /&gt;
- HttpClientFactory.insuranceIssuanceRequestConfig(): connect 5s, socket 45s. Not&lt;br /&gt;
  slowRegulatorRequestConfig() - its contract forbids request-thread use with an open&lt;br /&gt;
  transaction, which is exactly the ICICI call site.&lt;br /&gt;
- HttpTransportFailures: cause-chain check separating &apos;the call never completed&apos; from&lt;br /&gt;
  &apos;the remote said no&apos;. Needed because RestClient rewraps transport errors as&lt;br /&gt;
  RuntimeException(GE_1006), so the top-level exception type is uninformative.&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/HttpTransportFailures.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37359</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37359</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=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37321</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37321</guid></item>
<item><pubDate>Fri, 07 Aug 2026 03:35:45 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37259 – Hot deals Solr: category filter on hot-deal listings applied only ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hot deals Solr: category filter on hot-deal listings applied only when caller sends categoryId explicitly (page chips); getHotDealCategoryFacet - categoryId_i facet over curated deal models for the filter chips&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/solr/SolrService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37259</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37259</guid></item>
<item><pubDate>Thu, 06 Aug 2026 15:37:58 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37253 – fix: drop category gate on solr query when curated hot-deal ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;fix: drop category gate on solr query when curated hot-deal catalogIds are given&lt;br /&gt;
&lt;br /&gt;
Hot-deal listings are cross-category (phones/accessories/LEDs); the curated&lt;br /&gt;
catalogId filter is the scope, so categoryId_i must not also constrain it.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/solr/SolrService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37253</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37253</guid></item>
<item><pubDate>Thu, 06 Aug 2026 10:54:45 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37245 – SolrService: getSolrDocs overload with hotDealCatalogIds - restrict parents to active ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;SolrService: getSolrDocs overload with hotDealCatalogIds - restrict parents to active model_hot_deal models instead of legacy hot_deal_b child flag&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/solr/SolrService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37245</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37245</guid></item>
<item><pubDate>Tue, 04 Aug 2026 15:27:27 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37220 – invoice logo changed</title><description>&lt;div&gt;&lt;strong&gt;ranu – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;invoice logo changed&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/section/PartiesSection.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/resources/sdlogo.png&lt;br /&gt;+ /trunk/profitmandi-common/src/main/resources/sdlogoNew.png&lt;br /&gt;+ /trunk/profitmandi-common/src/main/resources/sdlogoold.png&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37220</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37220</guid></item>
<item><pubDate>Thu, 30 Jul 2026 19:49:00 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37189 – Remove unused allowAdditionalOutlet field (checkbox dropped in r37168/r37169 before any ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Remove unused allowAdditionalOutlet field (checkbox dropped in r37168/r37169 before any deploy; no reader or writer remains)&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/UpdateRetailerRequest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37189</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37189</guid></item>
<item><pubDate>Wed, 29 Jul 2026 16:29:51 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37155 – Add allowAdditionalOutlet flag to UpdateRetailerRequest for same-GST additional-outlet override in ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add allowAdditionalOutlet flag to UpdateRetailerRequest for same-GST additional-outlet override in partner onboarding guard&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/UpdateRetailerRequest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37155</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37155</guid></item>
<item><pubDate>Fri, 24 Jul 2026 17:16:43 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37142 – Brand eligibility: add brandExclusionFq helper and excludeBrands overload of getSolrDocs ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Brand eligibility: add brandExclusionFq helper and excludeBrands overload of getSolrDocs for partner restricted-brand filtering&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/solr/SolrService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37142</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2F&amp;isdir=1&amp;rev=37142</guid></item>
</channel></rss>