<?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>Fri, 18 Sep 2026 16:53:18 +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=37409</link><atom:link href="https://svn.smartdukaan.com/rss.php?path=%2F&amp;peg=37409&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<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=%2F&amp;isdir=1&amp;rev=37409&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37409&amp;peg=37409</guid></item>
<item><pubDate>Wed, 26 Aug 2026 12:38:10 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37408 – Vivo IMEI activation: stop spending captchas on line items with ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Vivo IMEI activation: stop spending captchas on line items with no IMEI&lt;br /&gt;
&lt;br /&gt;
76% of production captcha rejections were line items whose serial number is&lt;br /&gt;
null. Vivo answers those with {&quot;msg&quot;:&quot;参数为空&quot;} -- &quot;parameter is empty&quot; --&lt;br /&gt;
and status 0, which this code recorded as a captcha failure. So a correctly&lt;br /&gt;
solved captcha looked wrong, no activated_imei row was written, the line item&lt;br /&gt;
stayed pending, and it came back every 5 minutes indefinitely. Those rows were&lt;br /&gt;
permanently consuming roughly 43% of the run quota, which is why every tick ran&lt;br /&gt;
full at 20/20 and the backlog never drained.&lt;br /&gt;
&lt;br /&gt;
It also made the model look far worse than it is: measured accept rate 44%,&lt;br /&gt;
while the same solver scores 85-93% when the IMEI is present. True captcha&lt;br /&gt;
accuracy is around 77%.&lt;br /&gt;
&lt;br /&gt;
Fixed at source: both named queries now exclude null and blank serial numbers,&lt;br /&gt;
so such line items never enter the pool (this also covers the Realme caller).&lt;br /&gt;
The loop additionally skips them before fetching a captcha, so no captcha,&lt;br /&gt;
solver call or Vivo request is spent discovering it.&lt;br /&gt;
&lt;br /&gt;
Found via the diagnostics added in r37407 -- the previous log line recorded&lt;br /&gt;
five words and discarded the response that named the cause.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/VivoImeiActivationService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/fofo/ActivatedImei.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37408&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37408&amp;peg=37409</guid></item>
<item><pubDate>Wed, 26 Aug 2026 12:26:43 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37407 – Vivo IMEI activation: log why a captcha was rejected  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Vivo IMEI activation: log why a captcha was rejected&lt;br /&gt;
&lt;br /&gt;
Production refuses ~56% of submissions, but reading the stored images by hand&lt;br /&gt;
showed 9 of 10 carried the CORRECT code. Replicating the request from the same&lt;br /&gt;
box gives 85-93%, and every external difference was measured and ruled out:&lt;br /&gt;
real vs dummy imei (7/8 both), user-agent (83% both), session reuse (74 vs 75%),&lt;br /&gt;
two concurrent jobs (80% both), source IP, and fetch-to-submit delay from 0 to&lt;br /&gt;
10s (90-91% throughout). Vivo&apos;s reply is byte-identical in every failure, so the&lt;br /&gt;
payload carries no discriminator.&lt;br /&gt;
&lt;br /&gt;
That leaves something inside this process, and the old log line recorded five&lt;br /&gt;
words and discarded the evidence. It now captures the code submitted, the imei,&lt;br /&gt;
the real fetch-to-submit latency, the session cookies actually held at submit&lt;br /&gt;
time, and Vivo&apos;s full response.&lt;br /&gt;
&lt;br /&gt;
The cookies matter most: if the SESSION cookie is being dropped or rotated&lt;br /&gt;
between fetching the captcha and submitting it, the captcha would be validated&lt;br /&gt;
against the wrong session and refused despite a correct code -- which fits every&lt;br /&gt;
measurement above and is invisible from outside the JVM.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/VivoImeiActivationService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37407&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37407&amp;peg=37409</guid></item>
<item><pubDate>Wed, 26 Aug 2026 11:15:36 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37406 – Vivo captcha: put the /verdict shared secret in the cron ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Vivo captcha: put the /verdict shared secret in the cron properties&lt;br /&gt;
&lt;br /&gt;
The token was only in run-cron.sh, which is not version-controlled. Rebuild the&lt;br /&gt;
box or deploy elsewhere and it silently vanishes -- the verdict call is&lt;br /&gt;
best-effort and swallows failures, so nothing would break loudly; training data&lt;br /&gt;
would just quietly stop being collected. Properties travel with the build.&lt;br /&gt;
&lt;br /&gt;
dev and staging are deliberately empty: with no token CaptchaService skips the&lt;br /&gt;
call entirely, so a local run cannot post verdicts to the live solver and&lt;br /&gt;
pollute the training corpus.&lt;br /&gt;
&lt;br /&gt;
CAPTCHA_VERDICT_TOKEN in the environment still overrides this, so the token can&lt;br /&gt;
be rotated without a rebuild.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/resources/META-INF/dev.properties&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/resources/META-INF/prod.properties&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/resources/META-INF/staging.properties&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37406&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37406&amp;peg=37409</guid></item>
<item><pubDate>Tue, 25 Aug 2026 22:59:54 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37405 – Drive the onboarding/HR state dropdowns from inventory.statemaster  fofo-form.vm, fofo-edit.vm ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 6 file(s) modified&lt;/strong&gt;&lt;br/&gt;Drive the onboarding/HR state dropdowns from inventory.statemaster&lt;br /&gt;
&lt;br /&gt;
fofo-form.vm, fofo-edit.vm and hr_employee_form.vm each hardcoded their own state&lt;br /&gt;
list instead of using $stateNames. Six of those 37 values do not exist in the&lt;br /&gt;
master (&amp; vs and variants, Uttaranchal, the pre-merger UTs), so anything picked&lt;br /&gt;
from them could not be resolved back.&lt;br /&gt;
&lt;br /&gt;
Only the name=&quot;state&quot; select changed in hr_employee_form.vm; its other dropdowns&lt;br /&gt;
are untouched.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/FofoController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/HrmsController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/RegisterController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/fofo-edit.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/fofo-form.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/hr_employee_form.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37405&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37405&amp;peg=37409</guid></item>
<item><pubDate>Tue, 25 Aug 2026 22:59:47 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37404 – Serve the canonical state list from inventory.statemaster  Add GET ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Serve the canonical state list from inventory.statemaster&lt;br /&gt;
&lt;br /&gt;
Add GET /master-data/states returning each state&apos;s name and GST state code.&lt;br /&gt;
&lt;br /&gt;
Clients were each carrying their own hardcoded state list, which drifted from the&lt;br /&gt;
master. Anything we store is later resolved back through that master by name, so a&lt;br /&gt;
drifted list writes values nothing can resolve - which is how customer addresses&lt;br /&gt;
ended up with states like &apos;Daman &amp; Diu&apos; that the master no longer holds, leaving&lt;br /&gt;
those invoices unable to generate. Serving the list means a correction to the&lt;br /&gt;
master reaches every client without a release.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/MasterDataController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37404&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37404&amp;peg=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=%2F&amp;isdir=1&amp;rev=37403&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37403&amp;peg=37409</guid></item>
<item><pubDate>Tue, 25 Aug 2026 20:57:24 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37402 – Vivo IMEI activation: report Vivo&apos;s captcha verdict back to the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Vivo IMEI activation: report Vivo&apos;s captcha verdict back to the solver&lt;br /&gt;
&lt;br /&gt;
Only this cron ever learns whether Vivo accepted a captcha (status 0 means it&lt;br /&gt;
was wrong), so it is the only place that can label the solver&apos;s training data.&lt;br /&gt;
After each checkCode response it now posts the image, the code and the outcome&lt;br /&gt;
to the solver&apos;s /verdict endpoint, which files the sample as accepted (the&lt;br /&gt;
prediction was right - a free label) or rejected (needs a human to label it).&lt;br /&gt;
&lt;br /&gt;
The solver has been running at a measured 22.3% accept rate and no training&lt;br /&gt;
data was ever collected, so the model could not be improved at all.&lt;br /&gt;
&lt;br /&gt;
Strictly best-effort: 2s connect / 3s read timeouts and every exception&lt;br /&gt;
swallowed. Data collection must never slow down or break IMEI activation.&lt;br /&gt;
&lt;br /&gt;
The shared secret is read from CAPTCHA_VERDICT_TOKEN in the environment,&lt;br /&gt;
falling back to a captcha.verdict.token property, so it need not be committed.&lt;br /&gt;
Without a token the call is skipped entirely.&lt;br /&gt;
&lt;br /&gt;
Also drops /tmp/captcha.jpg: the captcha bytes are needed in memory for the&lt;br /&gt;
verdict report anyway, so the two concurrently-scheduled Vivo jobs no longer&lt;br /&gt;
share one file and overwrite each other&apos;s image.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CaptchaService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/VivoImeiActivationService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37402&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37402&amp;peg=37409</guid></item>
<item><pubDate>Tue, 25 Aug 2026 20:30:26 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37401 – Drop commented reference to the removed InvoiceFormatter</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Drop commented reference to the removed InvoiceFormatter&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=37401&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37401&amp;peg=37409</guid></item>
<item><pubDate>Tue, 25 Aug 2026 20:30:22 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37400 – Merge the three sale-invoice download endpoints into /invoice/download  generateInvoice, ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;Merge the three sale-invoice download endpoints into /invoice/download&lt;br /&gt;
&lt;br /&gt;
generateInvoice, generateInvoices and downloadInvoices differed only in how they&lt;br /&gt;
resolved the order ids and who was allowed to ask; everything after that was the&lt;br /&gt;
same. That drift meant only the single-order download stapled the policy&lt;br /&gt;
certificates, so the same invoice pulled from sale history came out without&lt;br /&gt;
them. One handler now selects by orderId, partner date range (admin only) or the&lt;br /&gt;
caller&apos;s own sale-history search, over reusable resolvers plus a shared&lt;br /&gt;
render-and-respond step. The old URLs stay as deprecated shims.&lt;br /&gt;
&lt;br /&gt;
The admin range download is now fault tolerant - one unbillable order used to&lt;br /&gt;
fail the whole batch.&lt;br /&gt;
&lt;br /&gt;
Remove the commented-out thermal variant of generateInvoice and the unused&lt;br /&gt;
paymentOptionIdPaymentOptionMapUsingPaymentOptions. Bump the asset version for&lt;br /&gt;
the sale.js change.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/OrderController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/sale.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/order-details.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/sale-details.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/search-order-details.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/search-order.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37400&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37400&amp;peg=37409</guid></item>
<item><pubDate>Tue, 25 Aug 2026 20:30:12 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37399 – Use the shared insurance invoice line builder for standalone policy ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Use the shared insurance invoice line builder for standalone policy invoices&lt;br /&gt;
&lt;br /&gt;
Replace the duplicated CustomInsurancePolicy block with InsuranceInvoiceLine.&lt;br /&gt;
Drop the setTotalAmount call - the renderer derives totals from the item lines,&lt;br /&gt;
so the value was never read - and the repository field it orphaned.&lt;br /&gt;
&lt;br /&gt;
Derive and set the invoice state codes, as the partner invoice already does, so&lt;br /&gt;
the place of supply prints when billing a registered buyer.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/InsuranceController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37399&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37399&amp;peg=37409</guid></item>
<item><pubDate>Tue, 25 Aug 2026 20:30:07 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37398 – Share one insurance invoice line builder across partner and standalone ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;Share one insurance invoice line builder across partner and standalone invoices&lt;br /&gt;
&lt;br /&gt;
Extract InsuranceInvoiceLine next to the partner invoice builder so both callers&lt;br /&gt;
- OrderServiceImpl.getInvoicePdfModel(FofoOrder) and the standalone policy&lt;br /&gt;
invoice in InsuranceController - produce the SAC, tax split and description from&lt;br /&gt;
one place. Arithmetic is unchanged (verified bit-identical); policyPlan is null&lt;br /&gt;
for policies sold outside a device sale, so it falls back to a generic plan name&lt;br /&gt;
instead of printing null.&lt;br /&gt;
&lt;br /&gt;
Add IciciLombardService.policyCertificatePath so the service that writes the&lt;br /&gt;
certificate owns the path; callers were rebuilding it and hardcoding the prod&lt;br /&gt;
directory, so lookups silently missed off prod.&lt;br /&gt;
&lt;br /&gt;
Add selectByInvoiceNumbersAndProviderId so bulk invoice downloads fetch policies&lt;br /&gt;
in one query instead of one per invoice.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/InsurancePolicyRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/InsurancePolicyRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/icicilombard/IciciLombardService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/order/InsuranceInvoiceLine.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/order/OrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37398&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37398&amp;peg=37409</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=%2F&amp;isdir=1&amp;rev=37397&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37397&amp;peg=37409</guid></item>
<item><pubDate>Tue, 25 Aug 2026 20:24:43 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37396 – observability: delete the log4j1 config left alongside log4j2.xml in fofo ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;observability: delete the log4j1 config left alongside log4j2.xml in fofo&lt;br /&gt;
&lt;br /&gt;
The module logs through log4j2 (log4j2.xml). This log4j.properties is a&lt;br /&gt;
log4j1-era leftover that nothing reads.&lt;/div&gt;x /trunk/profitmandi-fofo/src/main/resources/log4j.properties&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37396&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37396&amp;peg=37409</guid></item>
<item><pubDate>Tue, 25 Aug 2026 20:24:34 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37395 – observability: retire the dead Nagios monitoring path, migrate balance signals ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 6 file(s) modified&lt;/strong&gt;&lt;br/&gt;observability: retire the dead Nagios monitoring path, migrate balance signals to Micrometer&lt;br /&gt;
&lt;br /&gt;
There is no Nagios server and the NRPE daemons have been removed from every&lt;br /&gt;
host, so the properties files written under /var/log/services were being&lt;br /&gt;
produced for nobody.&lt;br /&gt;
&lt;br /&gt;
Deleted:&lt;br /&gt;
 - CronMetricsService: zero references. Spring instantiated the @Service so its&lt;br /&gt;
   constructor registered three meters, but nothing ever incremented them --&lt;br /&gt;
   cron_execution_* read 0 in prometheus while cron_job_count_total (from&lt;br /&gt;
   CronJobMonitorAspect) had recorded 1,597 executions.&lt;br /&gt;
 - NagiosMonitoringScheduledSkeleton.&lt;br /&gt;
&lt;br /&gt;
Removed the nagios properties writes from ScheduledSkeleton (-155 lines) and&lt;br /&gt;
KnowlarityCallMonitorScheduler (-46, including its now-purposeless&lt;br /&gt;
markTaskComplete helper). These recorded a per-job 0/1 status that&lt;br /&gt;
CronJobMonitorAspect already captures properly as success, failure and&lt;br /&gt;
duration metrics.&lt;br /&gt;
&lt;br /&gt;
Kept the two signals that are genuinely useful: SMS gateway balance and the&lt;br /&gt;
ThinkWalnut recharge wallet balance now publish as Micrometer gauges via the&lt;br /&gt;
new BalanceGauges component, scraped from /actuator/prometheus. -1 means &apos;not&lt;br /&gt;
read yet&apos; so a scrape before the first run is distinguishable from a real zero.&lt;br /&gt;
&lt;br /&gt;
No behaviour change to any scheduled job. Compiles clean.&lt;/div&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/monitored/BalanceGauges.java&lt;br /&gt;x /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/monitored/CronMetricsService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/monitored/NagiosMonitorTasks.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/knowlarity/KnowlarityCallMonitorScheduler.java&lt;br /&gt;x /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/NagiosMonitoringScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37395&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37395&amp;peg=37409</guid></item>
<item><pubDate>Tue, 25 Aug 2026 19:53:37 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37394 – total show on warehouse wise stock value on item detail</title><description>&lt;div&gt;&lt;strong&gt;ranu – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;total show on warehouse wise stock value on item detail&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/AdminUser.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/admin.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37394&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37394&amp;peg=37409</guid></item>
<item><pubDate>Tue, 25 Aug 2026 16:59:27 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37393 – Vivo IMEI activation: validate captcha solver response before submitting to ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Vivo IMEI activation: validate captcha solver response before submitting to Vivo&lt;br /&gt;
&lt;br /&gt;
The captcha solver at 45.79.121.178 was down from 09-Jul-2026 to 25-Aug-2026&lt;br /&gt;
(uwsgi never restarted after a host reboot). nginx returned a 502 page for&lt;br /&gt;
every request. RestClient.executeJson returns the response body regardless of&lt;br /&gt;
HTTP status, so CaptchaService handed that HTML page to Vivo as the captcha&lt;br /&gt;
code and Vivo logged it as &apos;Found invalid captcha&apos; - indistinguishable from an&lt;br /&gt;
ordinary wrong guess. The outage went unnoticed for 46 days.&lt;br /&gt;
&lt;br /&gt;
CaptchaService now checks the response against the solver model&apos;s own 31-class&lt;br /&gt;
alphabet (^[1-9A-HK-NP-Z]{4}$) and returns null for anything else, logging the&lt;br /&gt;
offending payload. VivoImeiActivationService skips the IMEI when the code is&lt;br /&gt;
null instead of posting the garbage; it is retried on the next run.&lt;br /&gt;
&lt;br /&gt;
Also drops a System.out.println of the full base64 captcha image.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CaptchaService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/VivoImeiActivationService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37393&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37393&amp;peg=37409</guid></item>
<item><pubDate>Mon, 24 Aug 2026 18:37:54 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37392 – Whatsapp Apis</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Whatsapp Apis&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2WalletController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37392&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37392&amp;peg=37409</guid></item>
<item><pubDate>Mon, 24 Aug 2026 18:11:52 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37391 – Whatsapp Apis</title><description>&lt;div&gt;&lt;strong&gt;vikas – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Whatsapp Apis&lt;/div&gt;+ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/services/RemarkAlertService.java&lt;br /&gt;+ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/services/RemarkSimilarity.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37391&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37391&amp;peg=37409</guid></item>
<item><pubDate>Mon, 24 Aug 2026 17:32:01 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37390 – total show on warehouse wise stock value on item detail</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;total show on warehouse wise stock value on item detail&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/IndentController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37390&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37390&amp;peg=37409</guid></item>
<item><pubDate>Mon, 24 Aug 2026 17:16:59 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37389 – total show on warehouse wise stock value on item detail</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;total show on warehouse wise stock value on item detail&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/IndentController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37389&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37389&amp;peg=37409</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=%2F&amp;isdir=1&amp;rev=37388&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37388&amp;peg=37409</guid></item>
<item><pubDate>Mon, 24 Aug 2026 15:36:31 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37387 – Disable UPI data</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Disable UPI data&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2WalletController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37387&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37387&amp;peg=37409</guid></item>
<item><pubDate>Mon, 24 Aug 2026 13:43:23 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37386 – aging stock report put dp after stock qty</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;aging stock report put dp after stock qty&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/PurSaleServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37386&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37386&amp;peg=37409</guid></item>
<item><pubDate>Mon, 24 Aug 2026 13:07:57 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37385 – Added Notice and PJP access to akhil.kumar@smartdukaan.com</title><description>&lt;div&gt;&lt;strong&gt;vikas – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Added Notice and PJP access to &lt;a href=&quot;mailto:akhil.kumar@smartdukaan.com&quot;&gt;akhil.kumar@smartdukaan.com&lt;/a&gt;&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/BeatJourneyController.java&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=37385&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37385&amp;peg=37409</guid></item>
<item><pubDate>Mon, 24 Aug 2026 13:00:31 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37384 – Fix My Stock brand tile styling on partner dashboard: use ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix My Stock brand tile styling on partner dashboard: use object-fit contain so brand wordmarks are not cropped, replace absolute-positioned ribbon hack with in-flow flex layout, and centre the brand columns instead of the hard-coded 10rem left margin&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/dashboard-modal.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37384&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37384&amp;peg=37409</guid></item>
<item><pubDate>Mon, 24 Aug 2026 11:06:54 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37383 – Disable UPI data</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Disable UPI data&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2WalletController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37383&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37383&amp;peg=37409</guid></item>
<item><pubDate>Fri, 21 Aug 2026 18:52:07 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37382 – Unbreak profitmandi-web: pass the optional fofoId r37377 added  r37377 ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Unbreak profitmandi-web: pass the optional fofoId r37377 added&lt;br /&gt;
&lt;br /&gt;
r37377 widened PurchaseReturnOrderRepository.selectByWarehouseIdsAndDateRange&lt;br /&gt;
with an optional fofoId so the FOFO Sale Returns partner filter could be a&lt;br /&gt;
predicate rather than a post-filter. r37378 updated the FOFO caller; this web&lt;br /&gt;
caller was missed, so it still passed 4 arguments to a 5-argument method and&lt;br /&gt;
profitmandi-web has not compiled since - the web war could not be built at all.&lt;br /&gt;
&lt;br /&gt;
/return/invoice has no partner picker (its only params are fromDate/toDate; the&lt;br /&gt;
fofoId param elsewhere in this controller belongs to searchDebitNotes), so null&lt;br /&gt;
is the right value: the impl only adds the fofoId predicate when non-null, which&lt;br /&gt;
is exactly this endpoint&apos;s pre-r37377 behaviour. No listing change.&lt;br /&gt;
&lt;br /&gt;
The other three methods r37377 added - selectPendingByWarehouseIds,&lt;br /&gt;
selectUnreceivedSince, selectEarliestCreateTimestamp - have no web callers; the&lt;br /&gt;
pending-queue screen is FOFO-only, so nothing else was left half-migrated.&lt;br /&gt;
&lt;br /&gt;
Verified all five modules compile.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoPurchaseReturnController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37382&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37382&amp;peg=37409</guid></item>
<item><pubDate>Fri, 21 Aug 2026 18:44:23 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37381 – Guard empty item IN () and null billing address on ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Guard empty item IN () and null billing address on the app sale-details paths&lt;br /&gt;
&lt;br /&gt;
Mirrors fofo r37380 on the profitmandi-web side, where the same two defects exist.&lt;br /&gt;
&lt;br /&gt;
V2FofoOrderController (live mobile-app API, not the dormant fofo V2):&lt;br /&gt;
- sale details built itemIds from fofoOrderItems and passed them straight to&lt;br /&gt;
  itemRepository.selectByIds. An insurance-only sale has no fofo_order_item row,&lt;br /&gt;
  so the list is empty and selectAllByInOrderByDesc throws &quot;List should not be&lt;br /&gt;
  empty&quot;. The sibling sale-search method in this same file was already guarded;&lt;br /&gt;
  the detail method was not.&lt;br /&gt;
- customerBillingAddressObj was put into the response unconditionally, so an&lt;br /&gt;
  order with customerAddressId 0 (no address is required for a plain POS sale)&lt;br /&gt;
  returned null and the app had no name or phone to show. Fall back to the&lt;br /&gt;
  customer&apos;s own name and mobile, matching the invoice PDF. Applied at both sites.&lt;br /&gt;
&lt;br /&gt;
CustomerController: same empty-IN exposure in the customer order-history batch&lt;br /&gt;
fetch, where a customer whose only order is an insurance sale yields no order&lt;br /&gt;
items. Adds the java.util.HashMap import this file needed (it imports java.util&lt;br /&gt;
members individually).&lt;br /&gt;
&lt;br /&gt;
Verified profitmandi-web compiles clean with these changes. Note trunk currently&lt;br /&gt;
does NOT build: V2FofoPurchaseReturnController:635 still calls the 4-arg&lt;br /&gt;
selectByWarehouseIdsAndDateRange that r37377 widened to 5 args (r37378 updated&lt;br /&gt;
the fofo caller but not this one). That break is untouched here and needs its&lt;br /&gt;
own fix before a web war can be built.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/CustomerController.java&lt;br /&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=37381&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37381&amp;peg=37409</guid></item>
<item><pubDate>Fri, 21 Aug 2026 18:44:11 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37380 – Fix /saleDetails 500 on insurance-only orders and null billing name/phone ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix /saleDetails 500 on insurance-only orders and null billing name/phone&lt;br /&gt;
&lt;br /&gt;
Two defects on the sale-details screen, both from a legitimately-empty source.&lt;br /&gt;
&lt;br /&gt;
1. /saleDetails 500s on an insurance-only order. A policy is not a catalog item,&lt;br /&gt;
so an insurance sale carries no fofo_order_item row; itemIds comes out empty and&lt;br /&gt;
itemRepository.selectByIds hits GenericRepositoryImpl.selectAllByInOrderByDesc,&lt;br /&gt;
which throws &quot;List should not be empty&quot; to guard against an empty IN (). The&lt;br /&gt;
same guard already exists two methods below at the sale-search site, so this&lt;br /&gt;
carries it across to the detail site. 346 orders across 95 partners are affected&lt;br /&gt;
- every insurance-only order ever written. The screen already loads the policies&lt;br /&gt;
and the view renders them, so nothing else was needed to display the sale.&lt;br /&gt;
&lt;br /&gt;
2. Billing name and phone rendered as the literal&lt;br /&gt;
.getName(). A plain POS sale does not require an&lt;br /&gt;
address (only insurance does), so ~140k orders across 1038 partners carry&lt;br /&gt;
customerAddressId 0 and the lookup returns null. The existing guard covered the&lt;br /&gt;
address *string* but the object was added to the model unconditionally, and&lt;br /&gt;
Velocity prints an unresolvable reference verbatim. Fall back to the customer&apos;s&lt;br /&gt;
own name and mobile, which the invoice PDF already does via&lt;br /&gt;
OrderServiceImpl.createCustomAddressWithoutId - so screen and invoice now agree.&lt;br /&gt;
The fallback is transient and never persisted; a missing customer row is&lt;br /&gt;
swallowed deliberately, since this feeds a display field and throwing would turn&lt;br /&gt;
blank text into a 500.&lt;br /&gt;
&lt;br /&gt;
Applied at both model-writing sites in this controller.&lt;/div&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=37380&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37380&amp;peg=37409</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=%2F&amp;isdir=1&amp;rev=37379&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37379&amp;peg=37409</guid></item>
<item><pubDate>Fri, 21 Aug 2026 14:30:59 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37378 – Put the action-pending returns at the top of Sale Returns, ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Put the action-pending returns at the top of Sale Returns, and filter by partner&lt;br /&gt;
&lt;br /&gt;
Sorting the received list pending-first changed nothing on screen, because every return&lt;br /&gt;
that still needs an action was missing from it. The list was built from purchase return&lt;br /&gt;
orders inside the date window, and a return order only exists once the warehouse has&lt;br /&gt;
received the goods - so a debit note awaiting receipt had no row to sort, and a return&lt;br /&gt;
sitting unrefunded for weeks fell out of the window entirely.&lt;br /&gt;
&lt;br /&gt;
The screen is now two lists:&lt;br /&gt;
&lt;br /&gt;
- Action Pending, on top, with no date bound. It merges the three shapes a pending return&lt;br /&gt;
  takes - a debit note never received, a return order received but unrefunded, and one&lt;br /&gt;
  rejected but not yet acknowledged - into a single row type, oldest first, with the age&lt;br /&gt;
  in days beside it. Each row carries only the action that actually applies to it&lt;br /&gt;
- Settled Returns below, refunded and cancelled only, still bound to From/To. The pending&lt;br /&gt;
  rows were lifted out of it, so nothing is listed twice&lt;br /&gt;
&lt;br /&gt;
Two things worth recording:&lt;br /&gt;
&lt;br /&gt;
- a debit note has no warehouse of its own. It is placed through the item&apos;s invoice and&lt;br /&gt;
  the order that invoice was raised on, and a note that cannot be placed is dropped rather&lt;br /&gt;
  than shown to a warehouse it may not belong to&lt;br /&gt;
- debit notes raised before the receive/refund flow existed were settled the old way and&lt;br /&gt;
  cannot be worked from this screen. The cutoff is read from the earliest return order in&lt;br /&gt;
  the database, so it needs no maintenance, and the page says so in a footnote instead of&lt;br /&gt;
  quietly hiding them&lt;br /&gt;
&lt;br /&gt;
The partner filter reuses the shared /partners typeahead and passes the id down into both&lt;br /&gt;
queries. Only a picked suggestion filters, so a half-typed name cannot blank the page. Its&lt;br /&gt;
handlers sit inline in the template, next to the markup they drive, following the pattern&lt;br /&gt;
add-wallet-request.vm already uses - which leaves the now-unused #invoice-return-date-apply&lt;br /&gt;
handler in return.js dead, to be removed with the return.js work already in flight.&lt;br /&gt;
&lt;br /&gt;
Rendered offline through Velocity with the app&apos;s own directive.set.null.allowed to confirm&lt;br /&gt;
all four action variants emit the right buttons.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PurchaseReturnController.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/model/SaleReturnRow.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/invoice-return.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37378&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37378&amp;peg=37409</guid></item>
<item><pubDate>Fri, 21 Aug 2026 14:30:40 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37377 – Queries behind the Sale Returns action-pending queue  The Sale ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Queries behind the Sale Returns action-pending queue&lt;br /&gt;
&lt;br /&gt;
The Sale Returns screen could only ever list purchase return orders received inside the&lt;br /&gt;
chosen date window, which left the returns that actually need someone unreachable: a&lt;br /&gt;
return order is written at receive time, so a debit note the warehouse has not received&lt;br /&gt;
yet has no return order at all and could not appear however the list was sorted.&lt;br /&gt;
&lt;br /&gt;
- selectPendingByWarehouseIds returns every unsettled return order with no date bound -&lt;br /&gt;
  received but unrefunded, or rejected but not yet acknowledged by the retailer. A return&lt;br /&gt;
  nobody acted on only gets older, so bounding it by date is what buried it&lt;br /&gt;
- selectUnreceivedSince finds debit notes with no return order against them, which is the&lt;br /&gt;
  only place a not-yet-received return exists. Cancelled notes are excluded&lt;br /&gt;
- selectEarliestCreateTimestamp exposes when the receive/refund flow went live. Notes&lt;br /&gt;
  raised before the first return order ever recorded were settled through the older&lt;br /&gt;
  item-level flow and are not a queue anyone can work, so the caller uses this to bound&lt;br /&gt;
  the lookup off the data rather than off a date pinned in code&lt;br /&gt;
- both listing queries now take an optional fofoId, so the partner filter is a predicate&lt;br /&gt;
  rather than a post-filter - filtering after the 200 row cap would silently drop a&lt;br /&gt;
  partner&apos;s older rows&lt;br /&gt;
&lt;br /&gt;
Counts on live data: 6 unsettled return orders, 24 unreceived debit notes since the flow&lt;br /&gt;
started, against 5,618 older notes correctly left out.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/DebitNoteRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/DebitNoteRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/PurchaseReturnOrderRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/PurchaseReturnOrderRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37377&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37377&amp;peg=37409</guid></item>
<item><pubDate>Thu, 20 Aug 2026 19:40:42 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37376 – total show on warehouse wise stock value on item detail</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;total show on warehouse wise stock value on item detail&lt;/div&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/warehouse_wise_stock_rows.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37376&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37376&amp;peg=37409</guid></item>
<item><pubDate>Thu, 20 Aug 2026 19:36:16 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37375 – total show on warehouse wise stock value on item detail</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;total show on warehouse wise stock value on item detail&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/inventory/SaholicInventoryCIS.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/inventory/SaholicInventoryCISRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/inventory/SaholicInventoryCISRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37375&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37375&amp;peg=37409</guid></item>
<item><pubDate>Thu, 20 Aug 2026 18:51:17 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37374 – total show on warehouse wise stock value on item detail</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;total show on warehouse wise stock value on item detail&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/AdminUser.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/WEB-INF/views/ftl/admin.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37374&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37374&amp;peg=37409</guid></item>
<item><pubDate>Thu, 20 Aug 2026 15:49:15 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37373 – 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-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2WalletController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37373&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37373&amp;peg=37409</guid></item>
<item><pubDate>Thu, 20 Aug 2026 13:21:07 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37372 – Fixed mail sender everywhere</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed mail sender everywhere&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/common/util/ExcelUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37372&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37372&amp;peg=37409</guid></item>
<item><pubDate>Thu, 20 Aug 2026 13:00:10 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37371 – Fixed mail sender everywhere</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed mail sender everywhere&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/GstProAuthService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37371&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37371&amp;peg=37409</guid></item>
<item><pubDate>Thu, 20 Aug 2026 12:32:51 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37370 – Fixed mail sender everywhere</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed mail sender everywhere&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/GstProAuthService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37370&amp;peg=37409</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37370&amp;peg=37409</guid></item>
</channel></rss>