<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SmartDukaan &#x2013; /</title><description>WebSVN RSS feed &#x2013; SmartDukaan</description><lastBuildDate>Thu, 08 Oct 2026 13:05:58 +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=37427</link><atom:link href="https://svn.smartdukaan.com/rss.php?peg=37427&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Wed, 26 Aug 2026 19:45:06 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37427 – src dashboard logic correction</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;src dashboard logic correction&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/AnalysisDashboardController.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/analysisDashboard.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37427&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37427&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 19:40:47 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37426 – Realme: treat the lookup response, not a missing error element, ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Realme: treat the lookup response, not a missing error element, as success&lt;br /&gt;
&lt;br /&gt;
After r37425 Realme logged 27 &apos;Success at attempt&apos; and 27 &apos;no active/check&lt;br /&gt;
response captured&apos; in the same window, and wrote 0 rows. The hook was not at&lt;br /&gt;
fault -- reproduced locally, it captures both XHR and fetch correctly.&lt;br /&gt;
&lt;br /&gt;
Success was being inferred from the ABSENCE of dx_captcha_basic_bar-inform:&lt;br /&gt;
&lt;br /&gt;
    try   { wait5Sec.until(visibilityOf(bar-inform)); log(&apos;Failed&apos;) }&lt;br /&gt;
    catch { log(&apos;Success&apos;) }&lt;br /&gt;
&lt;br /&gt;
realme rebuilt this page, so that element may no longer exist. The wait then&lt;br /&gt;
always times out and EVERY attempt reports success while the captcha was never&lt;br /&gt;
solved, no lookup fired and nothing was captured. The 27/27/0 is that exactly.&lt;br /&gt;
&lt;br /&gt;
The response arriving is the only signal that actually proves the captcha&lt;br /&gt;
passed, so it now waits for that (polling, up to 8s) and treats its absence as a&lt;br /&gt;
failure worth retrying. This also removes the separate &apos;no response captured&apos;&lt;br /&gt;
branch, since reaching the success path now means the response is in hand.&lt;br /&gt;
&lt;br /&gt;
Oppo is left alone: its bar-inform detection is working (0 missed captures&lt;br /&gt;
against 673 lookups), so there is nothing to fix there.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckRealmeWarrantyTask.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37426&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37426&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 19:27:25 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37425 – Oppo/Realme: capture the response from fetch as well as XHR ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Oppo/Realme: capture the response from fetch as well as XHR&lt;br /&gt;
&lt;br /&gt;
r37423 got Realme solving the captcha again -- 4 of 4 on the first tick after&lt;br /&gt;
deploy -- but every one logged &apos;Result shown but no active/check response&lt;br /&gt;
captured&apos;. The capture hook only wrapped XMLHttpRequest, and realme&apos;s page issues&lt;br /&gt;
the lookup through fetch, so it recorded nothing and each imei was stored with a&lt;br /&gt;
null date.&lt;br /&gt;
&lt;br /&gt;
The hook now wraps window.fetch too, cloning the response before reading it so&lt;br /&gt;
the page still consumes its own body. Applied to Oppo as well: its XHR path is&lt;br /&gt;
working today, but the same silent failure would follow any move to fetch, and&lt;br /&gt;
the cost is a few lines.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckOppoWarrantyTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckRealmeWarrantyTask.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37425&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37425&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 19:05:20 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37424 – Oppo/Realme slider captcha: size the calibration nudge from the gap ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Oppo/Realme slider captcha: size the calibration nudge from the gap&lt;br /&gt;
&lt;br /&gt;
r37422 replaced a 15px calibration nudge with a fixed 60px, which fixed the&lt;br /&gt;
under-measurement but introduced the opposite error. Production data over 764&lt;br /&gt;
calibrations shows 45% ended UNUSABLE (closed &amp;lt;= 0, i.e. the piece shot past the&lt;br /&gt;
hole and the measured gap grew instead of shrinking), and among gaps under 60px&lt;br /&gt;
it was 85%.&lt;br /&gt;
&lt;br /&gt;
The nudge is now sized from the gap -- aim to close about half of it -- and&lt;br /&gt;
clamped to [10,60]. Replaying the real observed gap distribution: unusable and&lt;br /&gt;
overshoot fall from 21% to 2%.&lt;br /&gt;
&lt;br /&gt;
The observed travel ratio in production is 1.13 circle px per slider px, against&lt;br /&gt;
1.68 measured locally; it varies with render scale, which is why the ratio is&lt;br /&gt;
still derived from the measurement. ASSUMED_RATIO only sizes the probe, and 1.7&lt;br /&gt;
errs toward a smaller nudge, which is the safe direction here.&lt;br /&gt;
&lt;br /&gt;
Oppo is currently solving 43% (was 9% before r37422). Realme carries the same&lt;br /&gt;
widget and the same defect and has not been deployed yet.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckOppoWarrantyTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckRealmeWarrantyTask.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37424&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37424&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 18:59:28 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37423 – Realme warranty check: retarget the rebuilt page and read its ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Realme warranty check: retarget the rebuilt page and read its JSON&lt;br /&gt;
&lt;br /&gt;
Realme has recorded nothing since 24-Aug, the same day Oppo stopped. Driving the&lt;br /&gt;
page confirms why: it was rebuilt and every selector the code used is gone.&lt;br /&gt;
&lt;br /&gt;
  .sn-input      -&gt; the field is now .imei-input input (placeholder &apos;Please input IMEI&apos;)&lt;br /&gt;
  div.check-btn  -&gt; the submit is now an icon, .imei-input .search-icon&lt;br /&gt;
&lt;br /&gt;
So it failed even earlier than Oppo did -- it could not type the imei, let alone&lt;br /&gt;
reach the captcha, which is why the log showed only &apos;Initiating webdriver...&apos;.&lt;br /&gt;
&lt;br /&gt;
The result now comes from the JSON the page already receives&lt;br /&gt;
(customer-api.realme.com/in/active/check) rather than an XPath keyed off a label&lt;br /&gt;
that no longer exists. That old locator also had an &apos;| //h1[contains(@class,&lt;br /&gt;
title)]&apos; branch which would silently match a page heading and try to parse it as&lt;br /&gt;
a date. The API is explicit: expiryDate (yyyy.MM.dd) and an isActivation flag,&lt;br /&gt;
so nothing is inferred from message text.&lt;br /&gt;
&lt;br /&gt;
expiryDate is the WARRANTY EXPIRY, so a year is still subtracted -- warranty is&lt;br /&gt;
12 months as standard. Checked against our own records rather than assumed:&lt;br /&gt;
41,267 of 41,289 stored Realme activation dates precede the date we checked&lt;br /&gt;
them, averaging 13 days before, which is only consistent with the subtraction&lt;br /&gt;
already being correct.&lt;br /&gt;
&lt;br /&gt;
Ports the r37422 captcha fix verbatim -- identical dingxiang slider, identical&lt;br /&gt;
15px calibration nudge that made it land ~30px out against a ~30px hole. And as&lt;br /&gt;
with Oppo the outcome is always recorded, even as null: findElement THREW when&lt;br /&gt;
the element was missing, so nothing was written and the imei was re-queued every&lt;br /&gt;
5 minutes indefinitely.&lt;br /&gt;
&lt;br /&gt;
Also converts 29 System.out.println to the logger. The cron JVM&apos;s stdout is a&lt;br /&gt;
socket from the launching ssh session, so every diagnostic was going nowhere.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckRealmeWarrantyTask.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37423&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37423&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 17:11:44 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37422 – Oppo slider captcha: calibrate over a longer nudge and correct ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Oppo slider captcha: calibrate over a longer nudge and correct before releasing&lt;br /&gt;
&lt;br /&gt;
The captcha solves about 10 times in 115 attempts. The arithmetic was right; the&lt;br /&gt;
measurement feeding it was not.&lt;br /&gt;
&lt;br /&gt;
To place the piece the code must first learn how far it travels per slider pixel,&lt;br /&gt;
which it did by nudging 15px and re-measuring. The piece moves ~1.7px per slider&lt;br /&gt;
px, so 15px closed the gap by only ~25px -- and Hough circle detection carries&lt;br /&gt;
about +/-2-3px per circle, so the ratio came from a measurement roughly 20%&lt;br /&gt;
wrong. That error was then multiplied across the whole remaining travel: on a&lt;br /&gt;
150px gap it landed ~30px out, against a hole ~30px wide.&lt;br /&gt;
&lt;br /&gt;
Nudging 60px closes ~100px, so the same detection noise is ~5% rather than ~20%.&lt;br /&gt;
The code also released on its single computed offset, committing all of that&lt;br /&gt;
error to the final position; it now measures once more after the main move and&lt;br /&gt;
closes the remainder before releasing. Math.round replaces an (int) cast that&lt;br /&gt;
biased every move short by up to a pixel.&lt;br /&gt;
&lt;br /&gt;
Monte Carlo over the measurement noise (20k trials, +/-8px tolerance): median&lt;br /&gt;
placement error 16.3px -&gt; 2.1px, success 26% -&gt; 98%. Holds across a 2x range of&lt;br /&gt;
travel ratios and degrades gracefully as detection worsens, because the ratio is&lt;br /&gt;
derived rather than assumed. Real-world will be lower -- the same model puts the&lt;br /&gt;
old code at 26% where production sees 9% -- so expect roughly 1 in 3, not 49 in&lt;br /&gt;
50, and read Success/Failed in the log to get the true figure.&lt;br /&gt;
&lt;br /&gt;
The ratio is returned rather than held on a field: this is a singleton and the&lt;br /&gt;
Oppo secondary and tertiary jobs run through it concurrently.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckOppoWarrantyTask.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37422&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37422&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 16:47:32 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37421 – EWB: recover existing e-way bill on NIC 604 instead of ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;EWB: recover existing e-way bill on NIC 604 instead of storing a placeholder&lt;br /&gt;
&lt;br /&gt;
DCNSUPDL948 generated EWB 451765074092 at NIC, then the transaction rolled back and&lt;br /&gt;
the number was lost. Every retry hit 604 and stored the literal EXISTING-LOOKUP-NEEDED&lt;br /&gt;
with no validity date, which routed the PDF down the transporter branch and NPE&apos;d on a&lt;br /&gt;
self-pickup dispatch with no warehouse_provider row. ~640 retries in 55 minutes, and&lt;br /&gt;
because the failure surfaced as an Error it escaped catch(Exception) and blocked six&lt;br /&gt;
other documents behind it.&lt;br /&gt;
&lt;br /&gt;
- GstProService: on 604, look the bill up via GetEwayBillsByDate + docNo match and&lt;br /&gt;
  return it in GENEWAYBILL shape; stamp NIC&apos;s generation time instead of now().&lt;br /&gt;
  Throw when it cannot be recovered rather than persist a placeholder.&lt;br /&gt;
- InvoiceService: saveInvoiceInNewTransaction no longer propagates. It commits&lt;br /&gt;
  irn_generated=0 with the reason so a failed document stops churning; already-filed&lt;br /&gt;
  invoices being re-rendered are left untouched.&lt;br /&gt;
- InvoiceService: cron loop catches Throwable so one bad document cannot skip the batch.&lt;br /&gt;
- InvoiceService: null-guard warehouse_provider; omit the transporter line instead of&lt;br /&gt;
  failing the PDF.&lt;br /&gt;
- recordIrnFailure: transport failures now park at 0 for escalation rather than&lt;br /&gt;
  requeueing for unbounded retry.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/GstProService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/invoicing/InvoiceService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37421&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37421&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 16:23:17 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37420 – Oppo warranty check: read the JSON response instead of scraping ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Oppo warranty check: read the JSON response instead of scraping the date&lt;br /&gt;
&lt;br /&gt;
Oppo has recorded no activation dates since 23-Aug. With logging restored&lt;br /&gt;
(r37410) the cause is visible: the captcha IS solved -- 10 successes per tick --&lt;br /&gt;
and it then fails on the very next line with&lt;br /&gt;
&lt;br /&gt;
  no such element: //*[contains(text(),&apos;UTC+5.5&apos;) or contains(text(),&apos;Non-Activate&apos;)]&lt;br /&gt;
&lt;br /&gt;
Their result is now label/value pairs, and the value is rendered from TWO text&lt;br /&gt;
nodes: dayjs(regDate).format(&apos;DD/MM/YYYY&apos;) plus a &apos;(UTC+x)&apos; suffix computed from&lt;br /&gt;
the browser&apos;s own timezone. XPath contains(text(),...) tests only the first node&lt;br /&gt;
-- the date -- so it never matched. &apos;Non-Activate&apos; is gone too: an inactive&lt;br /&gt;
device now reads &apos;The system will update the date within 7 days of device&lt;br /&gt;
activation.&apos; Verified against a replica of their DOM: old locator 0 matches, and&lt;br /&gt;
the value element yields &apos;23/08/2026 (UTC+5.5)&apos;.&lt;br /&gt;
&lt;br /&gt;
Rather than chase their markup again, take the value from the source: the page&lt;br /&gt;
calls /oppo-api/basic/v1/getDeviceInfo and the response carries regDate as epoch&lt;br /&gt;
millis -- no date format, no locale, no timezone suffix to parse. A small hook&lt;br /&gt;
records that response as the page receives it; nothing extra is requested and no&lt;br /&gt;
captcha behaviour changes.&lt;br /&gt;
&lt;br /&gt;
Also switches the outcome to always record the imei. findElement THREW when the&lt;br /&gt;
element was missing, which skipped the fallback entirely, so nothing was written&lt;br /&gt;
to dateMap and the row was re-queued on every run indefinitely -- &apos;Could not&lt;br /&gt;
capture date&apos; appears 0 times in the log because it was unreachable.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckOppoWarrantyTask.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37420&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37420&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 14:03:37 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37419 – Whatsapp botpenguin</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Whatsapp botpenguin&lt;/div&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/remarkscore/RemarkScoreService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37419&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37419&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 14:02:05 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37418 – Whatsapp botpenguin</title><description>&lt;div&gt;&lt;strong&gt;vikas – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Whatsapp botpenguin&lt;/div&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/remarkscore&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/remarkscore/DuplicateRemarkDigestRunner.java&lt;br /&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/remarkscore/RemarkScoreRunner.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37418&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37418&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 14:00:06 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37417 – Whatsapp botpenguin</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Whatsapp botpenguin&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=37417&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37417&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 13:56:04 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37416 – Port two cron WhatsApp call sites left behind by r37409/r37415. ...</title><description>&lt;div&gt;&lt;strong&gt;vikas – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Port two cron WhatsApp call sites left behind by r37409/r37415.&lt;br /&gt;
&lt;br /&gt;
OrderTrackingService sends the ORDER_DELIVERED template with the airway bill&lt;br /&gt;
as its only variable; the push notification on the same loop keeps its&lt;br /&gt;
formatted sentence, since template wording lives in Meta, not the call site.&lt;br /&gt;
Application drops the userMobileNumberOptIn and authUserMobileNumberOptIn CLI&lt;br /&gt;
options, whose NotificationService.optIn backing went with the Gupshup gateway.&lt;br /&gt;
&lt;br /&gt;
ScheduledTasks.java is deliberately not in this commit: locally it also carries&lt;br /&gt;
unrelated in-flight remark-scoring work whose package is still unversioned, so&lt;br /&gt;
committing it would put @Autowired RemarkScoreRunner into trunk with no such&lt;br /&gt;
class. Its two WhatsApp call sites (optIn at ~4618, sendWhatsappMessage at&lt;br /&gt;
~5276) therefore still fail to compile at HEAD and need a follow-up.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/Application.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ordertracking/OrderTrackingService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37416&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37416&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 13:46:51 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37415 – Whatsapp Apis</title><description>&lt;div&gt;&lt;strong&gt;vikas – 14 file(s) modified&lt;/strong&gt;&lt;br/&gt;Whatsapp Apis&lt;/div&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/Optin.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/OptinRepository.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/OptinRepositoryImpl.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/CpassWhatsappService.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/GupshupWhatsappService.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappListRow.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappListSection.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappProvider.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappProviderResolver.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappReplyButton.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappTemplateSender.java&lt;br /&gt;x /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/whatsapp/WhatsappProviderResolverTest.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/CpassTestController.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/CpassWebhookController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37415&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37415&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 13:39:31 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37414 – Whatsapp Apis</title><description>&lt;div&gt;&lt;strong&gt;vikas – 15 file(s) modified&lt;/strong&gt;&lt;br/&gt;Whatsapp Apis&lt;/div&gt;~ /trunk/profitmandi-common/src/test/resources/golden/cn-inter-p0.png&lt;br /&gt;~ /trunk/profitmandi-common/src/test/resources/golden/cn-intra-p0.png&lt;br /&gt;~ /trunk/profitmandi-common/src/test/resources/golden/dn-inter-p0.png&lt;br /&gt;~ /trunk/profitmandi-common/src/test/resources/golden/dn-intra-p0.png&lt;br /&gt;~ /trunk/profitmandi-common/src/test/resources/golden/dn-po-suppressed-p0.png&lt;br /&gt;~ /trunk/profitmandi-common/src/test/resources/golden/v1-inter-p0.png&lt;br /&gt;~ /trunk/profitmandi-common/src/test/resources/golden/v1-intra-p0.png&lt;br /&gt;~ /trunk/profitmandi-common/src/test/resources/golden/v1-margin-p0.png&lt;br /&gt;~ /trunk/profitmandi-common/src/test/resources/golden/v2-dc-p0.png&lt;br /&gt;~ /trunk/profitmandi-common/src/test/resources/golden/v2-inter-p0.png&lt;br /&gt;~ /trunk/profitmandi-common/src/test/resources/golden/v2-intra-p0.png&lt;br /&gt;~ /trunk/profitmandi-common/src/test/resources/golden/v2-margin-p0.png&lt;br /&gt;~ /trunk/profitmandi-common/src/test/resources/golden/v2-multiorder-p0.png&lt;br /&gt;~ /trunk/profitmandi-common/src/test/resources/golden/v2-po-orderdate-p0.png&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappNumbers.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37414&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37414&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 13:19:27 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37413 – 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-dao/src/main/java/com/spice/profitmandi/service/whatsapp/WhatsappNumbers.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37413&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37413&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 13:16:24 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37412 – Whatsapp Apis</title><description>&lt;div&gt;&lt;strong&gt;vikas – 6 file(s) modified&lt;/strong&gt;&lt;br/&gt;Whatsapp Apis&lt;/div&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/BotPenguinTestController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoLiquidationController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoUpSaleController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/resources/META-INF/prod.properties&lt;br /&gt;~ /trunk/profitmandi-web/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=37412&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37412&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 13:13:33 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37411 – v2 version some fixes</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;v2 version some fixes&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2InsuranceController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37411&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37411&amp;peg=37427</guid></item>
<item><pubDate>Wed, 26 Aug 2026 13:10:28 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37410 – Oppo warranty check: log to the logger instead of stdout ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Oppo warranty check: log to the logger instead of stdout&lt;br /&gt;
&lt;br /&gt;
Oppo has resolved nothing all day -- 83 ticks, the same 10 IMEIs recycled every&lt;br /&gt;
time, zero &quot;Serial Number ... Date&quot; results -- and the log shows only a single&lt;br /&gt;
line, &apos;Initiating webdriver...&apos;. That is not silence: the class had 1 LOGGER call&lt;br /&gt;
against 28 System.out.println, and the cron JVM&apos;s stdout is a socket inherited&lt;br /&gt;
from the SSH session that launched it. Every diagnostic was going nowhere.&lt;br /&gt;
&lt;br /&gt;
So the code has been reporting what is wrong 28 times per attempt (which element&lt;br /&gt;
was missing, the computed slider distance, success or failure per attempt, the&lt;br /&gt;
parsed date) and all of it was discarded. Same pattern as the Vivo bug found&lt;br /&gt;
today, where a five-word log line hid the real cause for weeks.&lt;br /&gt;
&lt;br /&gt;
Converted to LOGGER at info, with warn on the failure paths and error on the&lt;br /&gt;
catch-all, which now includes the exception rather than a bare printStackTrace.&lt;br /&gt;
The slider-widget timeout says which element it was waiting for, since that is&lt;br /&gt;
the most likely failure point.&lt;br /&gt;
&lt;br /&gt;
No behaviour change -- only where the output goes.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckOppoWarrantyTask.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37410&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37410&amp;peg=37427</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=%2F&amp;isdir=1&amp;rev=37409&amp;peg=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37409&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37408&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37407&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37406&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37405&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37404&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37403&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37402&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37401&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37400&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37399&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37398&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37397&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37396&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37395&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37394&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37393&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37392&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37391&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37390&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37389&amp;peg=37427</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=37427</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37388&amp;peg=37427</guid></item>
</channel></rss>