From cfb07ce1c04a8e1e0c0f190f16a503676d761bc9 Mon Sep 17 00:00:00 2001 From: Anton Volnuhin Date: Wed, 19 Mar 2025 20:41:30 +0300 Subject: [PATCH] Initial --- DEV.md | 778 ++++++++++++++++++++++++++++++++++++++++++++ README.md | 35 ++ altcats-2025-01.csv | 477 +++++++++++++++++++++++++++ app.js | 546 +++++++++++++++++++++++++++++++ index.html | 33 ++ package.json | 18 + server.js | 45 +++ styles.css | 120 +++++++ 8 files changed, 2052 insertions(+) create mode 100644 DEV.md create mode 100644 README.md create mode 100644 altcats-2025-01.csv create mode 100644 app.js create mode 100644 index.html create mode 100644 package.json create mode 100644 server.js create mode 100644 styles.css diff --git a/DEV.md b/DEV.md new file mode 100644 index 0000000..dda9157 --- /dev/null +++ b/DEV.md @@ -0,0 +1,778 @@ +# Visual Spending Visualization - Developer Guide + +This document provides details on how to customize and extend the Visual Spending sunburst chart. The visualization is built using Apache ECharts and displays spending data in a hierarchical, interactive format. + +## Table of Contents + +1. [Project Structure](#project-structure) +2. [Chart Configuration](#chart-configuration) +3. [Label Customization](#label-customization) +4. [Hover Effects](#hover-effects) +5. [Details Box](#details-box) +6. [Color Management](#color-management) +7. [Drilling Down & Interactivity](#drilling-down--interactivity) +8. [Data Structure](#data-structure) +9. [Layout & Positioning](#layout--positioning) +10. [Advanced Configuration](#advanced-configuration) + +## Project Structure + +The project consists of four main files: + +- **index.html**: Contains the basic HTML structure and imports libraries +- **styles.css**: Handles styling for the visualization and details box +- **app.js**: Contains the core functionality and visualization logic +- **server.js**: A simple Node.js server to serve the application + +## Chart Configuration + +The chart is created and configured in the `renderChart` function in `app.js`. The main configuration is defined in the `option` object: + +```javascript +option = { + backgroundColor: '#fff', + grid: { + left: '10%', + containLabel: true + }, + series: { + type: 'sunburst', + radius: [0, '95%'], + center: ['40%', '50%'], + nodeClick: 'rootToNode', + // ... other options + }, + // ... graphic elements, etc. +}; +``` + +### Key Configuration Properties + +- `type: 'sunburst'`: Specifies the chart type +- `radius`: Controls the inner and outer radius of the chart +- `center`: Positions the chart in the container [x, y] +- `nodeClick`: Determines behavior when clicking nodes ('rootToNode', 'link', false) +- `gap`: Space between segments (default: 0) +- `sort`: How to sort data (null, 'asc', 'desc', or function) + +## Label Customization + +Labels are configured at multiple levels: + +### Global Label Configuration + +```javascript +label: { + show: true, + formatter: function(param) { + // Logic to format labels + if (param.depth === 0) { + if (param.name.length > 10) { + return param.name.replace(/(.{1,10})(?: |$)/g, "$1\n").trim(); + } + return param.name; + } else { + return ''; + } + }, + minAngle: 5, // Only show labels in segments covering at least 5 degrees + align: 'center', // Horizontal alignment: 'left', 'center', 'right' + verticalAlign: 'middle', // Vertical alignment: 'top', 'middle', 'bottom' + position: 'inside' // Position: 'inside', 'outside' +} +``` + +### Per-Level Label Configuration + +Each level in the sunburst can have its own label configuration: + +```javascript +levels: [ + {}, // Level 0 (uses defaults) + { + // Level 1 (Categories) + r0: '15%', // Inner radius + r: '35%', // Outer radius + label: { + show: true, + rotate: 'tangential', // 'radial', 'tangential', or 0-360 degrees + fontSize: 12, + lineHeight: 15, + align: 'center', + verticalAlign: 'middle', + position: 'inside' + } + }, + // ... other levels +] +``` + +### Label Rotation Options + +- `rotate: 'tangential'`: Text follows the curve of the segment +- `rotate: 'radial'`: Text radiates outward from center +- `rotate: 30`: Rotate by a specific angle (in degrees) + +### Showing/Hiding Labels + +You can use a function to conditionally show/hide labels based on any criteria: + +```javascript +label: { + show: function(param) { + // Only show for segments larger than 5% of total + return (param.value / totalValue) > 0.05; + } +} +``` + +## Hover Effects + +Hover effects are defined in the `emphasis` property: + +```javascript +emphasis: { + focus: 'ancestor', // 'self', 'series', 'ancestor', 'descendant' + label: { + show: function(param) { + // Show labels for specific depths on hover + return param.depth === 3 || (param.depth === 2 && !param.data.children); + }, + position: function(param) { + // Position labels differently based on depth + if (param.depth === 3 || (param.depth === 2 && !param.data.children)) { + return 'outside'; + } + return 'inside'; + }, + formatter: function(param) { + // Format hover labels + if (param.depth > 0) { + if (param.name.length > 15) { + return param.name.slice(0, 12) + '...'; + } + return param.name; + } + return param.name; + }, + fontSize: 11, + fontWeight: 'bold', + backgroundColor: 'rgba(255,255,255,0.85)', // Label background + borderRadius: 4, // Rounded corners + padding: [3, 5], // [vertical, horizontal] padding + align: 'left', + verticalAlign: 'middle', + distance: 10, // Distance from segment (for 'outside') + borderColor: '#fff', + borderWidth: 1, + shadowBlur: 3, + shadowColor: 'rgba(0,0,0,0.2)' + }, + itemStyle: { + shadowBlur: 10, // Highlight shadow + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } +} +``` + +### Focus Types + +The `focus` property controls what gets highlighted: + +- `'self'`: Only highlight the hovered segment +- `'ancestor'`: Highlight the segment and its ancestors +- `'descendant'`: Highlight the segment and its descendants +- `'series'`: Highlight the entire series + +### Hover Label Animation + +To adjust how labels animate on hover: + +- For smoother transitions, use CSS transitions on the label elements +- Adjust `distance` to control how far labels move +- Set `animation: true` and `animationDuration: 300` (milliseconds) for animated transitions + +## Details Box + +The details box is updated via event handlers in the `setupHoverEvents` function: + +```javascript +function setupHoverEvents() { + const hoverNameElement = document.getElementById('hover-name'); + const hoverAmountElement = document.getElementById('hover-amount'); + const topItemsElement = document.getElementById('top-items'); + + myChart.on('mouseover', function(params) { + if (params.data) { + // Update details box content + hoverNameElement.textContent = params.name; + hoverAmountElement.textContent = params.value.toLocaleString() + ' RUB'; + + // Show top items/subcategories + topItemsElement.innerHTML = ''; + if (params.data.children && params.data.children.length > 0) { + // Sort and display children + // ... + } + } + }); +} +``` + +### Customizing the Details Box + +#### HTML Structure (index.html) + +```html +
+

Details

+
Hover over a segment to see details
+
+

Top Items:

+
+
+``` + +#### CSS Styling (styles.css) + +```css +#details-box { + position: absolute; + top: 10px; + right: 20px; + width: 280px; + background-color: white; + border-radius: 8px; + box-shadow: 0 2px 15px rgba(0, 0, 0, 0.15); + padding: 15px; + z-index: 10; + min-height: 200px; + max-height: 500px; + overflow-y: auto; + opacity: 0.95; + border: 1px solid #eee; +} + +/* Additional styling for elements inside the box */ +``` + +#### Modifying Top Items Display + +To change how the top items are displayed: + +```javascript +// Inside mouseover event handler +if (params.data.children && params.data.children.length > 0) { + // Sort children by value (or any other criteria) + const sortedChildren = [...params.data.children].sort((a, b) => b.value - a.value); + + // Limit to top N (e.g., top 10) + const topChildren = sortedChildren.slice(0, 10); + + // Create elements for each item + topChildren.forEach(child => { + const itemDiv = document.createElement('div'); + itemDiv.className = 'top-item'; + + // Customize what data is displayed + const nameSpan = document.createElement('span'); + nameSpan.className = 'top-item-name'; + nameSpan.textContent = child.name; + + const amountSpan = document.createElement('span'); + amountSpan.className = 'top-item-amount'; + + // Format values as needed + const percentage = ((child.value / params.value) * 100).toFixed(1); + amountSpan.textContent = `${child.value.toLocaleString()} ₽ (${percentage}%)`; + + itemDiv.appendChild(nameSpan); + itemDiv.appendChild(amountSpan); + topItemsElement.appendChild(itemDiv); + }); +} +``` + +## Color Management + +### Default Colors + +The initial colors are defined in the `transformToSunburst` function: + +```javascript +const colors = [ + '#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', + '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc', '#4cae72', + '#d56358', '#82b1ff', '#f19143', '#addf84', '#6f7787' +]; +``` + +### Color Assignment on Click + +When clicking on a segment, colors are reassigned to children: + +```javascript +myChart.on('click', function(params) { + if (params.depth >= 0) { + const colorPalette = [ + '#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', + '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc', '#4cae72' + ]; + + // ... find target data ... + + // Recolor children + targetData.children.forEach((child, i) => { + const color = colorPalette[i % colorPalette.length]; + child.itemStyle = { + color: color + }; + + // Handle grandchildren with color gradients + if (child.children && child.children.length > 0) { + const microColors = generateColorGradient(color, child.children.length); + child.children.forEach((micro, j) => { + micro.itemStyle = { + color: microColors[j] + }; + }); + } + }); + + // Update data + // ... + } +}); +``` + +### Color Gradient Generation + +The `generateColorGradient` function creates variations of a base color: + +```javascript +function generateColorGradient(baseColor, steps) { + const result = []; + const base = tinycolor(baseColor); + + for (let i = 0; i < steps; i++) { + let color; + if (i % 3 === 0) { + color = base.clone().lighten(15); // Lighter version + } else if (i % 3 === 1) { + color = base.clone().darken(10); // Darker version + } else { + color = base.clone().saturate(20); // More saturated + } + result.push(color.toString()); + } + + return result; +} +``` + +### Custom Color Schemes + +To use a different color scheme: + +1. Replace the color arrays with your preferred colors +2. For thematic colors, consider using ColorBrewer schemes or other predefined palettes +3. Use TinyColor functions to generate related colors: + - `lighten()` / `darken()` + - `saturate()` / `desaturate()` + - `spin()` (shift hue) + - `complement()` (get complementary color) + +## Drilling Down & Interactivity + +### Click Behavior + +The click behavior is controlled by the `nodeClick` option and event handlers: + +```javascript +// In the chart options +nodeClick: 'rootToNode', // 'rootToNode', 'link', or false + +// Event handler +myChart.on('click', function(params) { + // Handle the click event +}); +``` + +Options for `nodeClick`: +- `'rootToNode'`: Drill down to show the clicked node as root +- `'link'`: Use the link option of nodes (if defined) +- `false`: Disable click interaction + +### Custom Drill Down + +For full control over drill down behavior, set `nodeClick: false` and handle clicks manually: + +```javascript +myChart.on('click', function(params) { + // Update the chart based on what was clicked + // You can use a data structure to track the current view state + // And update the displayed data accordingly +}); +``` + +### Adding Click-to-Reset + +To add a "click center to reset" feature: + +```javascript +// Add a click event listener to the center area +myChart.getZr().on('click', function(event) { + // Get clicked position + const x = event.offsetX; + const y = event.offsetY; + + // Check if click is in the center area + const centerX = myChart.getWidth() * 0.4; // Match your 'center' setting + const centerY = myChart.getHeight() * 0.5; + const innerRadius = myChart.getWidth() * 0.15; // Match your inner radius + + const distance = Math.sqrt( + Math.pow(x - centerX, 2) + Math.pow(y - centerY, 2) + ); + + if (distance < innerRadius) { + // Reset the chart to its initial state + resetChart(); + } +}); + +function resetChart() { + // Reset the chart data to initial state + option.series.data = JSON.parse(JSON.stringify(originalData)); + myChart.setOption(option, { replaceMerge: ['series'] }); +} +``` + +## Data Structure + +### CSV Data Format + +The app reads data from CSV files with the following structure: + +``` +transaction_date,processing_date,transaction_description,comment,mcc,card_info,account,merchant_name,location,info_source,amount_original,currency_original,amount_rub,category,subcategory,microcategory,simple_name +``` + +Key fields used in the visualization: +- `category`: First level of the hierarchy +- `subcategory`: Second level of the hierarchy +- `microcategory`: Third level of the hierarchy +- `amount_rub`: The amount spent in Russian rubles + +### Transformed Data Structure + +The data is transformed into a hierarchical structure by `transformToSunburst`: + +```javascript +// Sample output +{ + total: 426571.09, // Total spending + data: [ + { + name: "Food", + value: 120000, + children: [ + { + name: "Groceries", + value: 80000, + children: [ + { name: "Fruits", value: 20000 }, + { name: "Vegetables", value: 15000 }, + // ... + ] + }, + // More subcategories... + ] + }, + // More categories... + ] +} +``` + +### Adding Custom Data + +To add metadata or custom properties: + +```javascript +// In the transformation function +const categoryNode = { + name: categoryObj.name, + value: categoryObj.value, + children: [], + // Custom properties + metadata: { + avgTransaction: categoryObj.value / transactionCount, + lastTransaction: lastTransactionDate, + // ...any other custom data + } +}; +``` + +## Layout & Positioning + +### Chart Size and Position + +```javascript +series: { + type: 'sunburst', + radius: [0, '95%'], // [innerRadius, outerRadius] + center: ['40%', '50%'], // [x, y] as percentages +} +``` + +### Ring Size Adjustment + +The rings are sized using the `levels` configuration: + +```javascript +levels: [ + {}, // Level 0 (uses defaults) + { + r0: '15%', // Inner radius of this level + r: '35%', // Outer radius of this level + // ... + }, + { + r0: '35%', // Should match the outer radius of previous level + r: '65%', + // ... + }, + { + r0: '65%', + r: '72%', // Just 7% width for the outermost ring + // ... + } +] +``` + +### Central Text Positioning + +The text in the center is positioned using graphic elements: + +```javascript +graphic: [ + { + type: 'text', + left: '40%', // Should match center[0] + top: '50%', // Vertical position + style: { + text: totalAmount.toLocaleString(), + // ... styling + }, + z: 100 // Higher values appear on top + }, + { + type: 'text', + left: '40%', + top: '58%', + style: { + text: 'RUB', + // ... styling + }, + z: 100 + } +] +``` + +## Advanced Configuration + +### Custom Tooltips + +```javascript +tooltip: { + trigger: 'item', // 'item' or 'axis' + formatter: function(info) { + // Customize tooltip content + const value = info.value.toLocaleString(); + const name = info.name; + const percentage = ((info.value / totalValue) * 100).toFixed(1); + + // Can return string or HTML + return ` +
${name}
+
Amount: ${value} RUB
+
Percentage: ${percentage}%
+ `; + }, + backgroundColor: 'rgba(255, 255, 255, 0.9)', + borderColor: '#ccc', + borderWidth: 1, + padding: 10, + textStyle: { + color: '#333' + } +} +``` + +### Animation Settings + +```javascript +animation: true, +animationThreshold: 1000, // Don't animate if too many data points +animationDuration: 1000, +animationEasing: 'cubicOut', // 'linear', 'quadraticIn/Out', 'cubicIn/Out', etc. +animationDelay: 0, +``` + +### Custom Sorting + +```javascript +// Sort segments by value (descending) +sort: function(a, b) { + return b.value - a.value; +} + +// Sort alphabetically +sort: function(a, b) { + return a.name.localeCompare(b.name); +} + +// Or use predefined options: +sort: 'desc' // 'desc', 'asc', or null (for data order) +``` + +### Adding Event Listeners + +```javascript +// After setting up the chart +myChart.on('mouseover', function(params) { /* ... */ }); +myChart.on('mouseout', function(params) { /* ... */ }); +myChart.on('click', function(params) { /* ... */ }); + +// For lower-level events +const zr = myChart.getZr(); +zr.on('click', function(event) { /* ... */ }); +zr.on('mousemove', function(event) { /* ... */ }); +``` + +### Responsiveness + +```javascript +// Handle window resize +window.addEventListener('resize', function() { + myChart.resize(); +}); + +// For more complex responsive behavior +window.addEventListener('resize', function() { + const width = window.innerWidth; + + if (width < 768) { + // Mobile view + option.series.center = ['50%', '50%']; + option.series.radius = [0, '90%']; + // Update other settings for small screens + } else { + // Desktop view + option.series.center = ['40%', '50%']; + option.series.radius = [0, '95%']; + } + + myChart.setOption(option); + myChart.resize(); +}); +``` + +### Adding Custom Legend + +```javascript +// In chart options +legend: { + type: 'scroll', + orient: 'vertical', + right: 10, + top: 20, + bottom: 20, + data: categoryNames // Array of category names +} + +// Or create a custom legend outside the chart +function createCustomLegend() { + const legendContainer = document.createElement('div'); + legendContainer.className = 'custom-legend'; + + // Add legend items + sunburstData.data.forEach((category, index) => { + const item = document.createElement('div'); + item.className = 'legend-item'; + + const colorBox = document.createElement('span'); + colorBox.className = 'color-box'; + colorBox.style.backgroundColor = colors[index % colors.length]; + + const label = document.createElement('span'); + label.textContent = `${category.name} (${category.value.toLocaleString()} RUB)`; + + item.appendChild(colorBox); + item.appendChild(label); + legendContainer.appendChild(item); + + // Add click handler to highlight corresponding segment + item.addEventListener('click', function() { + // Find and highlight the corresponding segment + }); + }); + + document.querySelector('.content-wrapper').appendChild(legendContainer); +} +``` + +### Performance Optimization + +For large datasets: + +```javascript +// Limit data size +function simplifyData(data, threshold) { + // If there are too many small items, group them as "Other" + const result = []; + const other = { name: 'Other', value: 0, children: [] }; + + data.forEach(item => { + if (item.value / totalValue > threshold) { + result.push(item); + } else { + other.value += item.value; + other.children.push(item); + } + }); + + if (other.value > 0) { + result.push(other); + } + + return result; +} + +// Usage +const simplifiedData = simplifyData(originalData, 0.01); // Group items < 1% +``` + +## Troubleshooting + +### Common Issues + +1. **Labels not appearing**: Check `minAngle` setting - labels only show on segments larger than the minimum angle +2. **Click not working**: Ensure `nodeClick` is set correctly and event handlers are properly configured +3. **Incorrect colors**: Check that color assignments in the transformation and click handlers are working +4. **Chart not updating**: Make sure to use `replaceMerge` option when updating data: `myChart.setOption(option, { replaceMerge: ['series'] })` + +### Debugging + +For debugging, you can add console logging in key functions: + +```javascript +myChart.on('click', function(params) { + console.log('Click params:', params); + // Continue with normal handling +}); + +// Or inspect the current options +console.log('Current options:', myChart.getOption()); +``` \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..1a8516f --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# Visual Spending + +A visualization tool for family spending data using Apache ECharts. + +## Features + +- Visualize spending per categories, subcategories, and microcategories as a sunburst graph +- Display spending data for different months +- Interactive visualization with hover details and click navigation + +## Usage + +1. Ensure you have Node.js installed on your system +2. Place your spending data CSV files in the root directory with the naming convention `altcats-YYYY-MM.csv` +3. Run the server: + +```bash +npm start +``` + +4. Open your browser and navigate to `http://localhost:3000` + +## Data Format + +The CSV file should have the following columns: +- transaction_date +- category +- subcategory +- microcategory +- amount_rub + +## Technologies Used + +- Apache ECharts +- Node.js \ No newline at end of file diff --git a/altcats-2025-01.csv b/altcats-2025-01.csv new file mode 100644 index 0000000..de5b6f7 --- /dev/null +++ b/altcats-2025-01.csv @@ -0,0 +1,477 @@ +"transaction_date","processing_date","transaction_description","comment","mcc","card_info","account","merchant_name","location","info_source","amount_original","currency_original","amount_rub","category","subcategory","microcategory","simple_name" +"2025-01-30","","Го!поедим","Категория: Фастфуд","5814","","Black Premium от Залина Б.","","","tbank","-154.0","RUB","-154.0","Еда","Готовая","На работе","Еда из вендомата Го!поедим" +"2025-01-09","","Пятёрочка","Категория: Супермаркеты","5411","*0638","Залина Б.","","","tbank","-2232.87","RUB","-2232.87","Еда","Продукты","","Покупка в Пятёрочке" +"2025-01-30","","Го!поедим","Категория: Фастфуд","5814","","Black Premium от Залина Б.","","","tbank","-534.0","RUB","-534.0","Еда","Готовая","На работе","Еда из вендомата Го!поедим" +"2025-01-30","","МегаФон","Категория: Связь","4814","*4273","Дебетовая карта","","","tbank","-1000.0","RUB","-1000.0","Технологии","Мобильная связь","Мегафон","Оплата мобильной связи МегаФон" +"2025-01-08","","МГТС +7 499 245-25-37","Категория: Интернет","","","Black Premium","","","tbank","-1198.0","RUB","-1198.0","Технологии","Инфраструктура домашнего интернета","Интернет","Оплата домашнего интернета МГТС" +"2025-01-11","","Аптека 36,6","Категория: Аптеки","5912","*0638","Залина Б.","","","tbank","-2462.0","RUB","-2462.0","Здоровье","Лекарства","","Покупка в аптеке 36,6" +"2025-01-13","","Азбука Вкуса","Категория: Супермаркеты","5411","*0638","","","","tbank","-1871.0","RUB","-1871.0","Еда","Продукты","Фрукты","Покупка в Азбуке Вкуса" +"2025-01-07","","Александр А. | Банк получателя: Тинькофф","Категория: Переводы","","","Black Premium","","","tbank","-2100.0","RUB","-2100.0","Еда","Готовая","Рестораны","Перевод Alexander A. за еду" +"2025-01-31","","Оплата услуг, пакетов, расширений связи","Категория: Мобильная связь","","","Т-Мобайл","","","tbank","-268.0","RUB","-268.0","Технологии","Мобильная связь","Т-Мобайл","Оплата услуг мобильной связи Т-Мобайл" +"2025-01-21","","Аврора РусКо_P_QR","Категория: Фастфуд","5814","*0638","","","","tbank","-555.75","RUB","-555.75","Еда","Готовая","На работе","Еда в Аврора Руско" +"2025-01-07","","нетмонет","Категория: Финансы","7299","*4770","ALL Airlines","","","tbank","-977.0","RUB","-977.0","Логистика","чаевые","","Чаевые через нетмонет" +"2025-01-07","","Борис Б. | Банк получателя: Сбербанк","Категория: Переводы","","","Black Premium от Залина Б.","","","tbank","-8000.0","RUB","-8000.0","Семьи","Залина","","Перевод Борису Б. (отцу Залины)" +"2025-01-14","","Аврора РусКо_P_QR","Категория: Фастфуд","5814","*0638","","","","tbank","-1116.25","RUB","-1116.25","Еда","Готовая","На работе","Еда в Аврора Руско" +"2025-01-20","","Проценты по кредиту","Категория: Услуги банка","","","ALL Airlines Premium Кредитный","","","tbank","-110.76","RUB","-110.76","Расходники","Проценты по кредиту","","Проценты по кредиту" +"2025-01-04","","ИП Перегудов_E_QR","Категория: Красота","7230","*0638","Залина Б.","","","tbank","-3000.0","RUB","-3000.0","Красота","Салоны красоты","","Лазерная эпиляция в ИП Перегудов" +"2025-01-17","","Достависта","Категория: Сервис","4215","*4770","","","","tbank","-484.0","RUB","-484.0","Логистика","Доставка","Услуга доставки","Оплата услуг доставки Достависта" +"2025-01-28","","АВРОРА РУСКО_P_QR","Категория: Фастфуд","5814","*0638","","","","tbank","-320.0","RUB","-320.0","Еда","Готовая","На работе","Еда в Аврора Руско" +"2025-01-08","","МГТС +7 495 709-16-45","Категория: Интернет","","","Black Premium","","","tbank","-1813.0","RUB","-1813.0","Технологии","Инфраструктура домашнего интернета","Интернет","Оплата домашнего интернета МГТС" +"2025-01-25","","Вероника З.","Black Market; Категория: Переводы","","*0638","Залина Б.","","","tbank","-2500.0","RUB","-2500.0","Еда","Готовая","Рестораны","Ужин в ресторане Black Market" +"2025-01-30","","Маргарита Х. | Банк получателя: Райффайзен","На свадьбу ДГ и КИ; Категория: Переводы","","","Black Premium от Залина Б.","","","tbank","-1000.0","RUB","-1000.0","Развлечения","Хобби Залины","","Подарок на свадьбу от Залины" +"2025-01-26","","Пятёрочка","Категория: Супермаркеты","5411","*0638","Залина Б.","","","tbank","-349.98","RUB","-349.98","Еда","Продукты","Мясо","Покупка продуктов в Пятёрочке" +"2025-01-02","2025-01-04","Transaction_Code: 230202001163332","","","*6076","","STEAMGAMES.COM 425952","USA, BELLEVUE","freedom","-5440.0","KZT","-1098.2","Развлечения","Хобби Антона","","Покупка игры в Steam" +"2025-01-31","2025-01-31","Перевозка пассажиров и багажа","","","","by Anton","YANDEX.TAXI","","yandex+receipts","-654.0","RUB","-654.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-15","","Андрей Б. | Банк получателя: Тинькофф","Категория: Переводы","","","Black Premium","","","tbank","-11990.0","RUB","-11990.0","Развлечения","Хобби Антона","","Перевод Андрею Б. за хобби" +"2025-01-28","","Аврора РусКо_P_QR","Категория: Фастфуд","5814","*0638","","","","tbank","-622.25","RUB","-622.25","Еда","Готовая","На работе","Еда в Аврора Руско" +"2025-01-04","2025-01-07","Transaction_Code: A3T6HBULD3K5E","","","*6076","","PP*P32F50CB1C","USA, 4029357733","freedom","-9309.09","KZT","-1879.27","Технологии","Инфраструктура домашнего интернета","Сервисы","Оплата сервиса Termius" +"2025-01-10","","Оплата услуг, пакетов, расширений связи","Категория: Мобильная связь","","","Т-Мобайл","","","tbank","-388.0","RUB","-388.0","Технологии","Мобильная связь","Т-Мобайл","Оплата услуг мобильной связи T-Мобайл" +"2025-01-31","2025-02-02","Оплата товаров и услуг YANDEX*5812*ULTIMA EDA","","","*5728","","","","yandex","-50.0","RUB","-50.0","Еда","Готовая","Супы","Домашняя лапша из Яндекс.Еды" +"2025-01-23","2025-01-25","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-1007.0","RUB","-1007.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-13","2025-01-14","Transaction_Code: 230202001163332","","","*6076","","STEAMGAMES.COM 425952","USA, BELLEVUE","freedom","-11120.0","KZT","-2237.43","Развлечения","Хобби Антона","","Покупка игры в Steam" +"2025-01-21","","Осетинский интернет","Категория: ЖКХ","","","","","","tbank","-1500.0","RUB","-1500.0","Квартира","Плата за электричество / воду","","Оплата ЖКХ через интернет" +"2025-01-26","2025-01-28","Yandex.Lavka Moskva RU","","","","","YANDEX.LAVKA","Moskva , RU ","raiffeisen","-74.0","RUB","-74.0","Еда","Продукты","Упаковка","Упаковка в Яндекс.Лавке" +"2025-01-29","2025-01-31","Оплата товаров и услуг YANDEX*5812*ULTIMA EDA","","","*5728","","","","yandex","-50.0","RUB","-50.0","Еда","Готовая","","Оплата заказа в Yandex.Eda" +"2025-01-04","2025-01-07","Transaction_Code: D5QZUCZ9JN6VN","","","*6076","","PAYPAL *HULU","USA, 4029357733","freedom","-16431.99","KZT","-3317.21","Развлечения","Подписки","Видео-стриминги","Hulu subscription payment" +"2025-01-16","","Ростелеком","Категория: Связь","4816","","Black Premium от Залина Б.","","","tbank","-2934.1","RUB","-2934.1","Технологии","Инфраструктура домашнего интернета","Интернет","Оплата Ростелеком за интернет" +"2025-01-13","","Аптека Ваша 1_P_QR","Категория: Аптеки","5912","*0638","","","","tbank","-1294.0","RUB","-1294.0","Здоровье","Лекарства","","Покупка в аптеке" +"2025-01-26","","Снятие в банкомате Т-Банк","Категория: Наличные","6011","","Black Premium от Залина Б.","","","tbank","-68000.0","RUB","-68000.0","Квартира","Аренда квартиры","","Снятие наличных для оплаты аренды" +"2025-01-14","","Почта России","Категория: Госуслуги","9402","","Black Premium от Залина Б.","","","tbank","-145.0","RUB","-145.0","Логистика","Почта","","Оплата услуг Почты России" +"2025-01-20","","Роснефть","Категория: Топливо","5541","*3318","","","","tbank","-1717.47","RUB","-1717.47","Логистика","Топливо","","Покупка топлива на Роснефти" +"2025-01-20","2025-01-22","urent G. MOSKVA RU","","","","","URENT","G. MOSKVA , RU ","raiffeisen","-899.0","RUB","-899.0","Логистика","Прочее","","Urent car sharing service" +"2025-01-17","2025-01-19","Transaction_Code: CY9HXX4MKJH8E","","","*6076","","PAYPAL *NEXTDNS","USA, 4029357733","freedom","-1100.28","KZT","-220.31","Технологии","Инфраструктура домашнего интернета","Сервисы","Оплата сервиса NextDNS" +"2025-01-26","2025-01-28","Yandex.Lavka Moskva RU","","","","","YANDEX.LAVKA","Moskva , RU ","raiffeisen","-49.0","RUB","-49.0","Еда","Продукты","Упаковка","Покупка пакета в Яндекс.Лавке" +"2025-01-06","2025-01-06","Оплата товаров и услуг YANDEX PLUS","","","","","","","yandex","-100.0","RUB","-100.0","Развлечения","Подписки","Яндекс.Плюс","Оплата подписки YANDEX PLUS" +"2025-01-24","2025-01-27","Yandex.Lavka Moskva RU","","","","","YANDEX.LAVKA","Moskva , RU ","raiffeisen","-50.0","RUB","-50.0","Еда","Продукты","","Покупка в Яндекс.Лавке" +"2025-01-30","2025-02-01","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-919.0","RUB","-919.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-15","2025-01-17","TBank-Avito Dostavka Moskva RU","","","","","TBANK-AVITO DOSTAVKA","Moskva , RU ","raiffeisen","-6569.0","RUB","-6569.0","Развлечения","Хобби Антона","","Покупка на Avito для хобби Антона" +"2025-01-28","2025-01-30","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-1135.0","RUB","-1135.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-16","2025-01-18","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-1526.0","RUB","-1526.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-19","2025-01-21","Yandex.Lavka Moskva RU","","","","","YANDEX.LAVKA","Moskva , RU ","raiffeisen","-50.0","RUB","-50.0","Логистика","чаевые","","Чаевые в Яндекс.Лавке" +"2025-01-11","2025-01-14","Transaction_Code: RFZ7BJGC6EY9E","","","*6076","","PAYPAL *WSJ","USA, 4029357733","freedom","-2201.04","KZT","-442.87","Развлечения","Подписки","Новости и тексты","Подписка на Wall Street Journal" +"2025-01-31","2025-02-03","Yandex.Lavka Moskva RU","","","","","YANDEX.LAVKA","Moskva , RU ","raiffeisen","-45.0","RUB","-45.0","Еда","Продукты","Упаковка","Покупка пакета в Яндекс.Лавке" +"2025-01-21","2025-01-24","YANDEX.TAXI MOSCOW RU","","","","","ЯНДЕКС ТАКСИ","MOSCOW , RU ","raiffeisen","-50.0","RUB","-50.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-21","2025-01-23","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-966.0","RUB","-966.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-31","2025-02-03","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-1165.0","RUB","-1165.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-28","2025-01-30","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-1127.0","RUB","-1127.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-25","2025-01-27","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-302.0","RUB","-302.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-21","2025-01-23","Y.M*BEGET SANKT-PETERBU RU","","","","","BEGET","SANKT-PETERBU, RU ","raiffeisen","-1860.0","RUB","-1860.0","Технологии","Инфраструктура домашнего интернета","Домены","Оплата домена Beget" +"2025-01-30","2025-02-01","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-1071.0","RUB","-1071.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-23","2025-01-25","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-956.0","RUB","-956.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-12","2025-01-14","NETBYNET Moscow RU","","","","","NETBYNET","Moscow , RU ","raiffeisen","-680.0","RUB","-680.0","Технологии","Инфраструктура домашнего интернета","Интернет","Оплата домашнего интернета NetByNet" +"2025-01-24","2025-01-27","Yandex Eda Moskva RU","","","","","YANDEX EDA","Moskva , RU ","raiffeisen","-25.0","RUB","-25.0","Еда","Готовая","Супы","Домашняя лапша из Яндекс.Еды" +"2025-01-19","2025-01-21","Y.M*BEGET SANKT-PETERBU RU","","","","","BEGET","SANKT-PETERBU, RU ","raiffeisen","-1650.0","RUB","-1650.0","Технологии","Инфраструктура домашнего интернета","Домены","Оплата домена Beget" +"2025-01-16","2025-01-18","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-1043.0","RUB","-1043.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-08","2025-01-10","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-550.0","RUB","-550.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-15","2025-01-17","Yandex.Lavka Moskva RU","","","","","YANDEX.LAVKA","Moskva , RU ","raiffeisen","-50.0","RUB","-50.0","Еда","Продукты","Овощи","Покупка овощей в Яндекс.Лавке" +"2025-01-12","2025-01-14","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-623.0","RUB","-623.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-10","2025-01-13","Yandex Eda Moskva RU","","","","","YANDEX EDA","Moskva , RU ","raiffeisen","-50.0","RUB","-50.0","Еда","чаевые","","Чаевые в сервисе Яндекса" +"2025-01-05","2025-01-07","WWW.LITRES.RU MOSKVA RU","","","","","ЛИТРЕС","MOSKVA , RU ","raiffeisen","-831.2","RUB","-831.2","Развлечения","Чтение","Электронные книги","Покупка электронной книги в ЛитРес" +"2025-01-17","2025-01-20","ROSTELECOM.RU MOSCOW RU","","","","","ROSTELECOM.RU","MOSCOW , RU ","raiffeisen","-2503.01","RUB","-2503.01","Технологии","Инфраструктура домашнего интернета","Интернет","Оплата домашнего интернета Ростелеком" +"2025-01-04","2025-01-08","ULTIMA YANDEX EDA MOSCOW RU","","","","","ULTIMA YANDEX EDA","MOSCOW , RU ","raiffeisen","-50.0","RUB","-50.0","Еда","Чаевые","","Чаевые в Яндекс.Еда" +"2025-01-04","2025-01-08","ULTIMA YANDEX EDA MOSCOW RU","","","","","ULTIMA YANDEX EDA","MOSCOW , RU ","raiffeisen","-50.0","RUB","-50.0","Еда","Чаевые","","Чаевые в Яндекс.Еда" +"2025-01-05","2025-01-05","Оплата СБП QR (Сервисы Яндекса)","","","","","","","yandex","-103.0","RUB","-103.0","Еда","чаевые","","Чаевые через СБП Яндекс сервисов" +"2025-01-03","2025-01-06","Y.M*SERVERS.RU MOSKVA RU","","","","","Y.M*SERVERS.RU","MOSKVA , RU ","raiffeisen","-758.96","RUB","-758.96","Технологии","Инфраструктура домашнего интернета","VPS","Оплата VPS Servers.ru" +"2025-01-24","2025-01-24","Оплата товаров и услуг YANDEX PLUS","","","","","","","yandex","-399.0","RUB","-399.0","Развлечения","Подписки","Всё-в-одном","Оплата подписки Yandex Plus" +"2025-01-17","2025-01-17","Оплата СБП QR (36Z3 TC Пятерочка)","","","","","","","yandex","-72.99","RUB","-72.99","Еда","Продукты","Продукты","Покупка в Пятерочке через СБП QR" +"2025-01-02","2025-01-04","Y.M*OZON MOSKVA RU","","","","","Y.M*OZON","MOSKVA , RU ","raiffeisen","-49.0","RUB","-49.0","Логистика","чаевые","","Чаевые при доставке Озон" +"2025-01-20","2025-01-20","Оплата СБП QR (Сервисы Яндекса)","","","","","","","yandex","-50.0","RUB","-50.0","Логистика","чаевые","","Чаевые через СБП Яндекс сервисов" +"2025-01-21","2025-01-23","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-1049.0","RUB","-1049.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-03","2025-01-06","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-659.0","RUB","-659.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-15","2025-01-17","novofon G. MOSKVA RU","","","","","NOVOFON","G. MOSKVA , RU ","raiffeisen","-1000.0","RUB","-1000.0","Технологии","Инфраструктура домашнего интернета","Интернет","Оплата услуг Novofon" +"2025-01-19","2025-01-21","Yandex.Lavka Moskva RU","","","","","YANDEX.LAVKA","Moskva , RU ","raiffeisen","-48.0","RUB","-48.0","Еда","Продукты","Упаковка","Покупка пакета в Яндекс.Лавке" +"2025-01-09","2025-01-13","Y.M*OZON MOSKVA RU","","","","","Y.M*OZON","MOSKVA , RU ","raiffeisen","-49.0","RUB","-49.0","Логистика","чаевые","","Чаевые при доставке Озон" +"2025-01-12","2025-01-14","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-679.0","RUB","-679.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-14","2025-01-16","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-627.0","RUB","-627.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-04","2025-01-06","Paramount+ Essential: Monthly (Monthly) (Subscription)","Apple US Store order","","*6076","Anton (anton@setia.io)","Paramount+","USA, 4029357733","freedom+receipts","-7.99","USD","-841.67","Развлечения","Подписки","Видео-стриминги","Paramount+ monthly subscription" +"2025-01-07","2025-01-09","Imagined Communities: Reflections on the Origin and Spread of Nationalism by Benedict Anderson [Kindle Edition]","Amazon Digital Order #D01-5333298-0560213","","*6076","","Penguin Random House Publisher Services","USA, 888-802-3080","freedom","-7.99","USD","-841.67","Развлечения","Чтение","Электронные книги","Покупка электронной книги Imagined Communities" +"2025-01-02","2025-01-04","Yandex.Lavka Moskva RU","","","","","YANDEX.LAVKA","Moskva , RU ","raiffeisen","-45.0","RUB","-45.0","Еда","Продукты","Упаковка","Покупка пакета в Яндекс.Лавке" +"2025-01-14","2025-01-16","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-1099.0","RUB","-1099.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-04","2025-01-06","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-635.0","RUB","-635.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-14","2025-01-16","OPLATA USLUG MOS.RU MOSCOW RU","","","","","OPLATA USLUG MOS.RU","MOSCOW , RU ","raiffeisen","-7437.41","RUB","-7437.41","Семьи","Антон","","Оплата квартплаты за квартиру в Выхино" +"2025-01-01","2025-01-03","Transaction_Code: 518898000202428","","","*6076","","Google CLOUD B2HzL2","IRL, Dublin","freedom","-8.93","USD","-940.69","Технологии","Инфраструктура домашнего интернета","VPS","Оплата Google Cloud VPS" +"2025-01-03","2025-01-06","YANDEX.TAXI MOSCOW RU","","","","","ЯНДЕКС ТАКСИ","MOSCOW , RU ","raiffeisen","-40.0","RUB","-40.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-12","2025-01-15","YANDEX.TAXI MOSCOW RU","","","","","ЯНДЕКС ТАКСИ","MOSCOW , RU ","raiffeisen","-40.0","RUB","-40.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-04","2025-01-06","Transaction_Code: OON4NMAR2VFMSY5","","","*6076","","READWISE","USA, RALEIGH","freedom","-5.99","USD","-630.99","Развлечения","Хобби Антона","","Подписка Readwise" +"2025-01-08","2025-01-10","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-598.0","RUB","-598.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-03","2025-01-06","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-719.0","RUB","-719.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-02","2025-01-03","Transaction_Code: 323670000156182","","","*6076","","AWS EMEA","LUX, aws.amazon.co","freedom","-8.89","USD","-936.47","Технологии","Инфраструктура домашнего интернета","VPS","Оплата AWS EMEA VPS" +"2025-01-06","2025-01-08","Fooled by Randomness: The Hidden Role of Chance in Life and in the Markets (Incerto Book 1) by Nassim Nicholas Taleb [Kindle Edition]","Amazon Digital Order #D01-0985373-7065800","","*6076","","Random House LLC","USA, 888-802-3080","freedom","-15.99","USD","-1684.39","Развлечения","Чтение","Электронные книги","Покупка электронной книги на Amazon Kindle" +"2025-01-12","2025-01-12","Оплата СБП QR (Сервисы Яндекса)","","","","","","","yandex","-60.0","RUB","-60.0","Еда","чаевые","","Чаевые через СБП Яндекс сервисов" +"2025-01-04","2025-01-06","YM *go MOSKVA RU","","","","","YM *GO","MOSKVA , RU ","raiffeisen","-571.0","RUB","-571.0","Логистика","Такси","","Поездка на Яндекс.Такси" +"2025-01-05","2025-01-07","WWW.LITRES.RU MOSKVA RU","","","","","ЛИТРЕС","MOSKVA , RU ","raiffeisen","-499.0","RUB","-499.0","Развлечения","Чтение","Электронные книги","Покупка электронной книги в ЛитРес" +"2025-01-10","2025-01-12","Записки из подполья (Russian Edition) by Федор Достоевский [Kindle Edition]","Amazon Digital Order #D01-3583382-7193816","","*6076","","Amazon.com Services LLC","USA, 888-802-3080","freedom","-0.99","USD","-104.91","Развлечения","Чтение","Электронные книги","Покупка электронной книги Достоевского" +"2025-01-07","2025-01-09","Transaction_Code: H6LVNPMMWPPT9VW","","","*6076","","CLOUDFLARE","USA, SAN FRANCISCO","freedom","-10.44","USD","-1099.75","Технологии","Инфраструктура домашнего интернета","Домены","Cloudflare domain registration" +"2025-01-11","2025-01-13","Transaction_Code: SXONGQUGQWWJUTM","","","*6076","","OPENAI *CHATGPT","USA, SAN FRANCISCO","freedom","-60.0","USD","-6335.01","Технологии","AI","ChatGPT","Оплата подписки на OpenAI ChatGPT" +"2025-01-06","2025-01-08","The Redemption of Time: A Three-Body Problem Novel (The Three-Body Problem Series Book 4) by Baoshu, Ken Liu [Kindle Edition]","Amazon Digital Order #D01-3108102-4992236","","*6076","","Macmillan","USA, 888-802-3080","freedom","-11.99","USD","-1263.03","Развлечения","Чтение","Электронные книги","Kindle book purchase: Redemption of Time" +"2025-01-01","2025-01-03","Transaction_Code: 518898000202394","","","*6076","","Google GSUITE_setia.ru","IRL, Dublin","freedom","-12.0","USD","-1264.08","Технологии","Инфраструктура домашнего интернета","Бэкап","Оплата Google GSuite" +"2025-01-07","2025-01-09","Necropolitics (Theory in Forms) by Achille Mbembe [Kindle Edition]","Amazon Digital Order #D01-3626622-8083410","","*6076","","Amazon.com Services LLC","USA, 888-802-3080","freedom","-11.55","USD","-1216.68","Развлечения","Чтение","Электронные книги","Покупка электронной книги Necropolitics" +"2025-01-01","2025-01-03","Transaction_Code: 526375168881","","","*6076","","LINODE . AKAMAI","USA, 6093807100","freedom","-10.0","USD","-1053.4","Технологии","Инфраструктура домашнего интернета","VPS","Оплата VPS Linode" +"2025-01-13","2025-01-14","Transaction_Code: ETVQAY0EN6ZQQO7","","","*6076","","KRISPCALL","AUS, MELBOURNE","freedom","-15.0","USD","-1583.75","Технологии","Инфраструктура домашнего интернета","Сервисы","Оплата услуг Krispcall" +"2025-01-12","2025-01-14","Transaction_Code: MZJ96QO0A3SN4BD","","","*6076","","CURSOR, AI POWERED ID","USA, NEW YORK","freedom","-20.0","USD","-2111.67","Технологии","AI","Прочее","Подписка на Cursor AI" +"2025-01-01","2025-01-03","Transaction_Code: 317577000299109","","","*6076","","VULTR BY CONSTANT","USA, VULTR.COM","freedom","-3.36","USD","-353.94","Технологии","Инфраструктура домашнего интернета","VPS","Оплата VPS Vultr" +"2025-01-20","2025-01-22","Transaction_Code: H6LVNPMMWPPT9VW","","","*6076","","CLOUDFLARE","USA, SAN FRANCISCO","freedom","-11.84","USD","-1256.23","Технологии","Инфраструктура домашнего интернета","Домены","Cloudflare domain registration" +"2025-01-20","2025-01-22","Transaction_Code: Q0RRUWQV26H30SO","","","*6076","","CLAUDE.AI SUBSCR","USA, SAN FRANCISCO","freedom","-20.0","USD","-2122.01","Технологии","AI","Claude","Claude.ai subscription" +"2025-01-23","2025-01-24","Transaction_Code: GWLETHIMMO07FWD","","","*6076","","WWW.PERPLEXITY.A","USA, SAN FRANCISCO","freedom","-4.99","USD","-508.07","Технологии","AI","Perplexity","Perplexity AI subscription" +"2025-01-03","2025-01-07","Transaction_Code: 011382032","","","*6076","","TIMES NEWSPAPERS LTD","GBR, LONDON E98 1X","freedom","-1.0","GBP","-132.09","Развлечения","Подписки","Тексты","Подписка на Times Newspapers Ltd." +"2025-01-29","2025-01-31","Transaction_Code: KA3GP5EPWAQ7BLQ","","","*6076","","GITHUB, INC.","USA, SAN FRANCISCO","freedom","-10.0","USD","-1014.93","Технологии","AI","Прочее","Github subscription" +"2025-01-09","2025-01-11","Не только кимчхи: История, культура и повседневная жизнь Кореи (Russian Edition) by Андрей Ланьков [Kindle Edition]","Amazon Digital Order #D01-8259633-0179468","","*6076","","Amazon.com Services LLC","USA, 888-802-3080","freedom","-4.97","USD","-523.54","Развлечения","Чтение","Электронные книги","Покупка электронной книги на Amazon" +"2025-01-12","2025-01-16","Apollo AI: Private & Local AI","Apple US Store order","","*6076","Anton (anton@setia.io)","Aaron Ng","USA, 4029357733","freedom+receipts","-6.52","USD","-688.4","Технологии","AI","Прочее","Apollo AI subscription" +"2025-01-30","2025-02-01","Transaction_Code: 767200080889","","","*6076","","ADOBE *CS ADDTL ST","USA, 4085366000","freedom","-9.99","USD","-1014.4","Развлечения","Хобби Антона","","Adobe subscription for Anton's hobby" +"2025-01-07","2025-01-09","The Invention of the Jewish People by Shlomo Sand, Yael Lotan [Kindle Edition]","Amazon Digital Order #D01-8342455-0141060","","*6076","","Penguin Random House Publisher Services","USA, 888-802-3080","freedom","-7.99","USD","-841.67","Развлечения","Чтение","Электронные книги","Покупка электронной книги Shlomo Sand" +"2025-01-27","2025-01-31","Apple News+ (Automatic Renewal) (Monthly) (Subscription)","Apple US Store order","","*0742","Anton (anton@setia.io)","Apple News+ (Automatic Renewal)","","bakai+receipts","-12.99","USD","-1322.4","Развлечения","Подписки","Новости и тексты","Apple News+ subscription" +"2025-01-18","2025-01-20","Transaction_Code: YTYSPKT0NGKFR5R","","","*6076","","HOME ASSISTANT CLOU","USA, SACRAMENTO","freedom","-6.5","USD","-689.65","Технологии","Инфраструктура домашнего интернета","Сервисы","Оплата Home Assistant Cloud" +"2025-01-13","2025-01-15","000000000205805 Financial Times","","","*0742","","","","bakai","-10.45","USD","-1103.35","Развлечения","Подписки","Новости и тексты","Подписка на Financial Times" +"2025-01-16","2025-01-20","Private LLM - Local AI Chatbot","Apple US Store order","","*6076","Anton (anton@setia.io)","Numen Technologies Limited","USA, 4029357733","freedom+receipts","-10.88","USD","-1158.82","Технологии","AI","Прочее","Private LLM - Local AI Chatbot subscription" +"2025-01-07","2025-01-09","Transaction_Code: 395708100629","","","*6076","","NETFLIX.COM","USA, LOS GATOS","freedom","-25.03","USD","-2636.66","Развлечения","Подписки","Видео-стриминги","Netflix subscription payment" +"2025-01-12","2025-01-16","Transaction_Code: 2AUP9LKLFXCEU","","","*6076","","PAYPAL *NUYEK LLC","LUX, 4029357733","freedom","-5.0","USD","-527.92","Технологии","AI","Прочее","Оплата AI-сервиса через PayPal" +"2025-01-07","2025-01-09","Paramount+ with SHOWTIME® (Monthly) (Subscription)","Apple US Store order","","*6076","Anton (anton@setia.io)","Paramount+","USA, 4029357733","freedom+receipts","-12.99","USD","-1368.37","Развлечения","Подписки","Видео-стриминги","Paramount+ with SHOWTIME subscription" +"2025-01-12","2025-01-14","Paradise Lost by John Milton [Kindle Edition]","Amazon Digital Order #D01-6960212-7043405","","*6076","","De Marque","USA, 888-802-3080","freedom","-0.99","USD","-104.53","Развлечения","Чтение","Электронные книги","Покупка электронной книги Paradise Lost" +"2025-01-31","2025-02-02","Transaction_Code: 767200080889","","","*6076","","ADOBE *ADOBE","USA, 4085366000","freedom","-15.99","USD","-1623.54","Развлечения","Хобби Антона","","Adobe subscription for Anton's hobby" +"2025-01-28","2025-01-31","PRODAMUS Joshkar-Ola RU","","","","","PRODAMUS","Joshkar-Ola , RU ","raiffeisen","-750.0","RUB","-750.0","Семьи","Залина","Занятия","Уроки для Алисы через Prodamus" +"2025-01-09","2025-01-11","Spies and Scholars: Chinese Secrets and Imperial Russia’s Quest for World Power by Gregory Afinogenov [Kindle Edition]","Amazon Digital Order #D01-8809696-7600207","","*6076","","Amazon.com Services LLC","USA, 888-802-3080","freedom","-33.25","USD","-3502.56","Развлечения","Чтение","Электронные книги","Покупка электронной книги в Kindle" +"2025-01-16","2025-01-18","Transaction_Code: UTKZU3DZR5BG0BJ","","","*6076","","X CORP. PAID FEA","USA, SAN FRANCISCO","freedom","-8.0","USD","-852.07","Технологии","AI","Grok/X.corp","Оплата подписки X.corp (Grok AI)" +"2025-01-25","2025-01-27","Y.M*OPENFACE MOSKVA RU","","","","","Y.M*OPENFACE","MOSKVA , RU ","raiffeisen","-1990.0","RUB","-1990.0","Семьи","Залина","Занятия","Подписка на OPENFACE для Алисы" +"2025-01-16","2025-01-18","Transaction_Code: PLHUBMDHCAKQGK1","","","*6076","","IFTTT PRO+","USA, SAN FRANCISCO","freedom","-9.0","USD","-958.58","Технологии","Инфраструктура домашнего интернета","Сервисы","Оплата сервиса IFTTT" +"2025-01-03","2025-01-06","YM *chaika.com MOSKVA RU","","","","","YM *CHAIKA.COM","MOSKVA , RU ","raiffeisen","-2863.0","RUB","-2863.0","Здоровье","Клиники","Клиника Чайка","Оплата услуг в клинике Чайка" +"2025-01-15","2025-01-17","Transaction_Code: 330946000103177","","","*6076","","GOOGLE *YouTubePr","USA, 650-253-0000","freedom","-1149.0","RSD","-1077.26","Развлечения","Подписки","Видео-стриминги","YouTube Premium subscription" +"2025-01-18","2025-01-21","Transaction_Code: JNWK9W4NQSUV6","","","*6076","","PAYPAL *MULLVAD","SWE, 35314369001","freedom","-10.0","EUR","-1086.36","Технологии","Инфраструктура домашнего интернета","VPN","Оплата Mullvad VPN" +"2025-01-14","2025-01-15","Transaction_Code: 160146000762203","","","*6076","","Kindle Svcs*ZD8W4","USA, 888-802-3080","freedom","-0.29","USD","-30.86","Развлечения","Чтение","Электронные книги","Покупка электронной книги в Kindle" +"2025-01-11","2025-01-14","PFWRPDQ33IWEFXE HEPTABASE","","","*0742","","","","bakai","-11.99","USD","-1265.95","Развлечения","Хобби Антона","Heptabase","Heptabase subscription for Anton's hobby" +"2025-01-18","2025-01-20","Transaction_Code: UVOZ1RUQKW1MGKL","","","*6076","","MIDJOURNEY INC.","USA, SOUTH SAN FRA","freedom","-10.0","USD","-1061.01","Развлечения","Хобби Антона","","Midjourney subscription for Anton's hobby" +"2025-01-21","2025-01-22","Transaction_Code: WZHPAVI1IOTBVBH","","","*6076","","BACKBLAZE INC","USA, SAN MATEO","freedom","-1.11","USD","-117.25","Технологии","Инфраструктура домашнего интернета","Бэкап","Оплата сервиса резервного копирования Backblaze" +"2025-01-26","2025-01-29","EAYJLNFB9UDAW PAYPAL *NANO IT SIA","","","*0742","","","","bakai","-5.48","USD","-557.87","Технологии","Инфраструктура домашнего интернета","VPS","Оплата хостинга NANO IT SIA" +"2025-01-08","2025-01-11","ROSTELECOM.RU MOSCOW RU","","","","","ROSTELECOM.RU","MOSCOW , RU ","raiffeisen","-396.82","RUB","-396.82","Технологии","Инфраструктура домашнего интернета","Интернет","Оплата домашнего интернета Ростелеком" +"2025-01-01","2025-01-06","Батарейки литиевые дисковые таблетки GP Lithium CR2450, 3 V, набор 5 шт | Количество: 2","Заказ Ozon №00211598-1320","","","by Anton","""А Зет"", О00","MOSCOW , RU ","raiffeisen+receipts","-1866.0","RUB","-1866.0","Расходники","Батарейки","","Покупка литиевых батареек на Ozon" +"2025-01-28","2025-01-31","PRODAMUS Joshkar-Ola RU","","","","","PRODAMUS","Joshkar-Ola , RU ","raiffeisen","-7900.0","RUB","-7900.0","Семьи","Залина","Занятия","Уроки для Алисы через Prodamus" +"2025-01-29","2025-01-30","Transaction_Code: 248750000103177","","","*6076","","GOOGLE *Google On","USA, 650-253-0000","freedom","-24.99","USD","-2536.3","Технологии","AI","Прочее","Подписка Google One" +"2025-01-30","2025-02-01","Transaction_Code: MG5XDG3BJNTQQXH","","","*6076","","YOU.COM","USA, PALO ALTO","freedom","-10.0","USD","-1015.41","Технологии","AI","Прочее","You.com AI search engine subscription" +"2025-01-09","2025-01-13","Пакет-майка OZON fresh","Заказ Ozon №06644447-0379","","","by Zalina","OOO OZON","MOSCOW , RU ","raiffeisen+receipts","-9.0","RUB","-9.0","Еда","Продукты","Упаковка","Пакет-майка для продуктов из Ozon" +"2025-01-12","","Кастрюля 5 л 24 см Tefal Cook&Clip G7234674 с крышкой из нержавеющей стали, с мерной шкалой, со сливными носиками, для всех типов плит, включая индукционные, гарантия на нержавеющую сталь 10 лет","Заказ Ozon №06644447-0382","","","by Zalina","""ГИПЕР"", О00","","ozon+receipts","-4325.0","RUB","-4325.0","Расходники","Кухонная утварь","","Покупка кастрюли Tefal на Ozon" +"2025-01-29","2025-02-03","526056900883 PAYPAL *MEDIUM.COM","","","*0742","","","","bakai","-5.0","USD","-507.46","Развлечения","Подписки","Тексты","Подписка на Medium.com через PayPal" +"2025-01-26","2025-01-30","Pal Chat Pro (Monthly) (Subscription)","Apple US Store order","","*0742","Anton (anton@setia.io)","Pal Chat - AI Chat Client","","bakai+receipts","-7.61","USD","-774.71","Технологии","AI","Прочее","Subscription to Pal Chat AI Client" +"2025-01-17","","Ольга Г.","Категория: Переводы","","","Black Premium от Залина Б.","","","tbank","-7500.0","RUB","-7500.0","Здоровье","Психотерапия","","Оплата психотерапевта Залины" +"2025-01-03","2025-01-06","YM *chaika.com MOSKVA RU","","","","","YM *CHAIKA.COM","MOSKVA , RU ","raiffeisen","-1863.0","RUB","-1863.0","Здоровье","Клиники","Клиника Чайка","Оплата услуг в клинике Чайка" +"2025-01-10","2025-01-14","PZ3UCP3XNMFHW PAYPAL *HETZNER","","","*0742","","","","bakai","-13.27","USD","-1406.27","Технологии","Инфраструктура домашнего интернета","VPS","Оплата хостинга Hetzner" +"2025-01-05","2025-01-09","Всем Иран. Парадоксы жизни в автократии под санкциями","Заказ Ozon №00211598-1321","","","by Anton","Торговый Дом Эксмо, О000","MOSCOW , RU ","raiffeisen+receipts","-693.0","RUB","-693.0","Развлечения","Чтение","Бумажные книги","Покупка книги в Торговом Доме Эксмо" +"2025-01-04","","Рефил насыщенного увлажняющего крема для лица 50 мл DON'T TOUCH MY SKIN","Заказ Ozon №06644447-0377","","","by Zalina","ООО ""ДТМС"", 000","","ozon+receipts","-1197.0","RUB","-1197.0","Красота","Кремы","","Рефил крема для лица на Ozon" +"2025-01-23","2025-01-25","tips.yandex Moskva RU","","","","","TIPS.YANDEX","Moskva , RU ","raiffeisen","-140.0","RUB","-140.0","Логистика","чаевые","","Чаевые в сервисе Yandex" +"2025-01-22","2025-01-28","Apple Music Subscription (Monthly) (Subscription)","Apple US Store order","","*0742","Anton (anton@setia.io)","Apple Music Subscription","","bakai+receipts","-5.99","USD","-620.12","Развлечения","Подписки","Музыка","Apple Music monthly subscription" +"2025-01-11","2025-01-14","PVIEDZ5FKJPFTGC TANA.INC","","","*0742","","","","bakai","-12.0","USD","-1267.0","Развлечения","Хобби Антона","","Subscription to Tana productivity service" +"2025-01-08","2025-01-13","Раствор увлажняющий офтальмологический Хиломакс-Комод 10 мл","Заказ Ozon №06644447-0378","","","by Zalina","ПУЛЬСАР, 000","MOSCOW , RU ","raiffeisen+receipts","-1032.0","RUB","-1032.0","Здоровье","Лекарства","","Раствор для глаз Хиломакс-Комод Ozon" +"2025-01-19","2025-01-21","Y.M*YANDEX.PLUS MOSKVA RU","","","","","Y.M*YANDEX.PLUS","MOSKVA , RU ","raiffeisen","-199.0","RUB","-199.0","Развлечения","Подписки","Яндекс.Плюс","Yandex Plus subscription payment" +"2025-01-12","2025-01-14","Transaction_Code: VKFRNOOEQOS7P5Z","","","*6076","","HOSTSLIM O* HOSTSLIM","NLD, LELYSTAD","freedom","-6.25","EUR","-680.18","Технологии","Инфраструктура домашнего интернета","VPS","Оплата хостинга HostSlim" +"2025-01-12","2025-01-14","YM *chaika.com MOSKVA RU","","","","","YM *CHAIKA.COM","MOSKVA , RU ","raiffeisen","-4913.0","RUB","-4913.0","Здоровье","Клиники","Клиника Чайка","Оплата услуг в клинике Чайка" +"2025-01-16","","Не реви, ты еще жив | Бойе Кирстен","Заказ Ozon №06644447-0383","","","by Zalina","Самокат Плюс, ООО","","ozon+receipts","-470.0","RUB","-470.0","Развлечения","Чтение","Бумажные книги","Покупка книги на Ozon" +"2025-01-12","2025-01-15","Мяч для пилатеса / 20 см / YourFit","Заказ Ozon №06644447-0380","","","by Zalina","ЕБШ, ООО","MOSCOW , RU ","raiffeisen+receipts","-376.0","RUB","-376.0","Расходники","Прочее","","Pilates ball purchase on Ozon" +"2025-01-04","2025-01-06","Y.M*URENT MOSKVA RU","","","","","Y.M*URENT","MOSKVA , RU ","raiffeisen","-149.0","RUB","-149.0","Логистика","Прочее","","Urent car sharing service" +"2025-01-10","2025-01-14","","","","*6076","","PAYPAL *HETZNER","","freedom","-12.34","EUR","-1343.49","Технологии","Инфраструктура домашнего интернета","VPS","Оплата хостинга Hetzner через PayPal" +"2025-01-12","","Сковорода Tefal Enjoy Mini 18 см с индикатором нагрева, антипригарным покрытием, подходит для газовых, электрических и стеклокерамических плит","Заказ Ozon №06644447-0381","","","by Zalina","""ГИПЕР"", О00","","ozon+receipts","-999.0","RUB","-999.0","Расходники","Кухонная утварь","","Покупка сковороды Tefal на Ozon" +"2025-01-12","","Шумовка с ситом, металлическая, для казана, INTESNA PREMIUM / Сито 37см из нержавеющей стали","Заказ Ozon №06644447-0381","","","by Zalina","ООО ""ИНТЕС"", ООО","","ozon+receipts","-1664.0","RUB","-1664.0","Расходники","Кухонная утварь","Шумовка","Покупка шумовки для казана на Ozon" +"2025-01-09","2025-01-13","Успокаивающий восстанавливающий бальзам для тела, лица и губ La Roche-Posay Cicaplast Baume B5+ с пантенолом, 100 мл","Заказ Ozon №06644447-0379","","","by Zalina","OOO OZON","MOSCOW , RU ","raiffeisen+receipts","-1394.0","RUB","-1394.0","Красота","Кремы","","La Roche-Posay balm from Ozon" +"2025-01-12","","Дуршлаг металлический нержавеющая сталь / сито металлическое XINEST для промывки круп, риса, макарон, фруктов, Черная","Заказ Ozon №06644447-0381","","","by Zalina","ООО ""АРТИСТ"", ООО","","ozon+receipts","-716.0","RUB","-716.0","Расходники","Кухонная утварь","Дуршлаг","Покупка дуршлага на Ozon" +"2025-01-13","2025-01-16","Мышеловка гуманная ловушка, 2 штуки, живоловка для мышей и крыс в доме | Количество: 2","Заказ Ozon №00211598-1324","","","by Anton","Лазарев Алексей Леонидович, ИП","MOSCOW , RU ","raiffeisen+receipts","-1348.0","RUB","-1348.0","Расходники","Прочее","","Покупка мышеловки на Ozon" +"2025-01-09","2025-01-13","Газированный напиток Coca-Cola, 0,33 л | Количество: 10","Заказ Ozon №06644447-0379","","","by Zalina","OOO OZON","MOSCOW , RU ","raiffeisen+receipts","-1100.0","RUB","-1100.0","Еда","Продукты","Напитки","Покупка Coca-Cola на Ozon" +"2025-01-17","2025-01-20","Магнит Magtrade с зенковкой, диск 20х4х5мм, под болт/саморез, комплект 5шт","Заказ Ozon №00211598-1325","","","by Anton","Власов Михаил Юрьевич, ИП","MOSCOW , RU ","raiffeisen+receipts","-763.0","RUB","-763.0","Расходники","Прочее","Крепеж","Покупка крепежа на Ozon" +"2025-01-01","2025-01-06","Батарейки литиевые дисковые таблетки GP Lithium CR2032, 3 В, набор 10 шт | Количество: 2","Заказ Ozon №00211598-1320","","","by Anton","""А Зет"", ООО","MOSCOW , RU ","raiffeisen+receipts","-850.0","RUB","-850.0","Расходники","Батарейки","","Покупка литиевых батареек на Ozon" +"2025-01-19","","Пакет-майка OZON fresh","Заказ Ozon №06644447-0384","","","by Zalina","OOO OZON","","ozon+receipts","-6.0","RUB","-6.0","Еда","Продукты","Упаковка","Пакет-майка для продуктов OZON fresh" +"2025-01-12","2025-01-15","OPENFACE Дезодорант-антиперспирант с АНА-кислотами SWEET NOT SWEAT","Заказ Ozon №06644447-0380","","","by Zalina","Бирюкова Ирина Михайловна, ИП","MOSCOW , RU ","raiffeisen+receipts","-705.0","RUB","-705.0","Красота","Кремы","","OPENFACE deodorant-antiperspirant from Ozon" +"2025-01-05","2025-01-09","Купола, дворцы, ДК. История и смыслы архитектуры России","Заказ Ozon №00211598-1322","","","by Anton","OOO OZON","MOSCOW , RU ","raiffeisen+receipts","-1140.0","RUB","-1140.0","Развлечения","Чтение","Бумажные книги","Покупка книги Купола, дворцы на Ozon" +"2025-01-16","","Убийство в ""Восточном экспрессе"" | Кристи Агата","Заказ Ozon №06644447-0383","","","by Zalina","Торговый Дом Эксмо, ООО","","ozon+receipts","-455.0","RUB","-455.0","Развлечения","Чтение","Бумажные книги","Покупка бумажной книги в Ozon" +"2025-01-12","2025-01-15","Кремовые румяна CHEEKSTYLER оттенок VERY BERRY","Заказ Ozon №06644447-0380","","","by Zalina","Петросян Тамара Рафаеловна, ИП","MOSCOW , RU ","raiffeisen+receipts","-1388.0","RUB","-1388.0","Красота","Кремы","","Покупка кремовых румян на Ozon" +"2025-01-25","2025-01-28","MES_redirect_EPR_1844 Moscow RU","","","","","MES_REDIRECT_EPR_1844","Moscow , RU ","raiffeisen","-8298.68","RUB","-8298.68","Квартира","Плата за электричество / воду","","Оплата электроэнергии через MES_redirect_EPR" +"2025-01-19","2025-01-23","Утяжелитель для штор 150г 3м","Заказ Ozon №00211598-1329","","","by Anton","Щедрина Елена Викторовна, ИП","MOSCOW , RU ","raiffeisen+receipts","-1252.0","RUB","-1252.0","Расходники","мелкий ремонт","","Curtain weight from Ozon" +"2025-01-21","","Набор картриджей atoll №103 STD для обратного осмоса А-575","Заказ Ozon №00211598-1331","","","by Anton","Научно-производственное объединение ""Русфильтр"", ООО","","ozon+receipts","-6659.0","RUB","-6659.0","Расходники","Замена разных фильтров","","Набор картриджей для фильтра воды" +"2025-01-09","2025-01-13","Курьерская доставка партнером","Заказ Ozon №06644447-0379","","","by Zalina","Ысманкул уулу Алымбек","MOSCOW , RU ","raiffeisen+receipts","-187.0","RUB","-187.0","Логистика","Доставка","Услуга доставки","Курьерская доставка Ozon" +"2025-01-12","","Толкушка для картофеля, INTESNA PREMIUM 27,8 см, пресс для пюре, картофелемялка из нержавеющей стали","Заказ Ozon №06644447-0381","","","by Zalina","ООО ""ИНТЕС"", ООО","","ozon+receipts","-1383.0","RUB","-1383.0","Расходники","Кухонная утварь","Толкушка для картофеля","Покупка толкушки для картофеля на Ozon" +"2025-01-04","","Сыворотка для лица с витамином С DON'T TOUCH MY SKIN в формате рефила 30мл","Заказ Ozon №06644447-0377","","","by Zalina","ООО ""ДТМС"", ООО","","ozon+receipts","-2400.0","RUB","-2400.0","Красота","Кремы","","Сыворотка для лица DON'T TOUCH MY SKIN" +"2025-01-27","2025-01-30","Пакет-майка OZON fresh","Заказ Ozon №06644447-0386","","","by Zalina","OOO OZON","MOSCOW , RU ","raiffeisen+receipts","-9.0","RUB","-9.0","Еда","Продукты","Упаковка","Пакет-майка для продуктов из Ozon" +"2025-01-27","2025-01-30","Пакет-майка OZON fresh","Заказ Ozon №06644447-0386","","","by Zalina","OOO OZON","MOSCOW , RU ","raiffeisen+receipts","-9.0","RUB","-9.0","Еда","Продукты","Упаковка","Пакет-майка для продуктов из Ozon" +"2025-01-12","","Набор для кухни Кулинарные лопатки деревянные. Цельная и с прорезями, с черной ручкой. 2 шт.","Заказ Ozon №06644447-0381","","","by Zalina","Перстнев Андрей Григорьевич, ИП","","ozon+receipts","-549.0","RUB","-549.0","Расходники","Кухонная утварь","","Кухонные лопатки на Ozon" +"2025-01-10","2025-01-13","Не только кимчхи: История, культура и повседневная жизнь Кореи | Ланьков Андрей Николаевич | Электронная книга","Заказ Ozon №00211598-1323","","","by Anton","ЛитРес, ООО","MOSCOW , RU ","raiffeisen+receipts","-456.0","RUB","-456.0","Развлечения","Чтение","Электронные книги","Покупка электронной книги в ЛитРес" +"2025-01-19","","Фильтр для очистителя воздуха антибактериальный Mi Air Purifier 2, 25, 3, 3C, 3H c меткой RFID (MCR-FLA)","Заказ Ozon №00211598-1327","","","by Anton","Калабина Татьяна Сергеевна, ИП","","ozon+receipts","-1858.0","RUB","-1858.0","Расходники","Замена разных фильтров","","Фильтр для очистителя воздуха Ozon" +"2025-01-08","2025-01-13","Ортодонтические резинки для брекетов / Тяги для брекетов (эластики) - Баран / Ram (6,35 мм., 170 гр.) | Количество: 2","Заказ Ozon №06644447-0378","","","by Zalina","Ерютов Антон Александрович, ИП","MOSCOW , RU ","raiffeisen+receipts","-740.0","RUB","-740.0","Здоровье","Лекарства","","Ортодонтические резинки для брекетов Ozon" +"2025-01-17","2025-01-20","Магнит усиленный 20х3 мм с зенковкой 4,5х7 мм - 6 шт, мощный","Заказ Ozon №00211598-1325","","","by Anton","ООО ""МЕРКУРИЙ"", ООО","MOSCOW , RU ","raiffeisen+receipts","-464.0","RUB","-464.0","Расходники","мелкий ремонт","Магниты","Покупка магнитов для мелкого ремонта" +"2025-01-16","","Маленькая всемирная история / Развивающие книги / История для детей | Гомбрих Эрнст","Заказ Ozon №06644447-0383","","","by Zalina","Альпина Паблишер, ОО0","","ozon+receipts","-575.0","RUB","-575.0","Развлечения","Чтение","Бумажные книги","Покупка детской книги в Ozon" +"2025-01-19","2025-01-23","Декоративный короб для рулонной шторы","Заказ Ozon №00211598-1330","","","by Anton","ООО ""МАНУФАКТУРА"", ООО","MOSCOW , RU ","raiffeisen+receipts","-539.0","RUB","-539.0","Расходники","Прочее","","Decorative box for roller blind" +"2025-01-17","2025-01-20","Магнит 20х5 мм (диаметр 20 мм, толщина 5 мм) - 5 штук","Заказ Ozon №00211598-1325","","","by Anton","Магнитные Элементы, ООО","MOSCOW , RU ","raiffeisen+receipts","-717.0","RUB","-717.0","Расходники","мелкий ремонт","Магниты","Покупка магнитов для мелкого ремонта" +"2025-01-19","2025-01-22","Магнитные виниловые наклейки с клеевым слоем 50 шт., / Магнит на клеевой основе 13x25 мм, толщина: 0,4 мм","Заказ Ozon №00211598-1328","","","by Anton","Лондарев Павел Сергеевич, ИП","MOSCOW , RU ","raiffeisen+receipts","-379.0","RUB","-379.0","Расходники","Прочее","","Магнитные наклейки с клеевым слоем" +"2025-01-19","","Книга Осетины народы и культуры","Заказ Ozon №06644447-0384","","","by Zalina","ИЗДАТЕЛЬСТВО НАУКА, ФГБУ","","ozon+receipts","-1909.0","RUB","-1909.0","Развлечения","Чтение","Бумажные книги","Покупка бумажной книги Осетины" +"2025-01-25","2025-01-28","Салфетки бумажные Kleenex Ultra Soft трехслойные, комплект: 3 упаковки по 56 шт | Количество: 2","Заказ Ozon №00211598-1333","","","by Anton","ООО ""АИ"", 000","MOSCOW , RU ","raiffeisen+receipts","-2510.0","RUB","-2510.0","Расходники","Прочее","","Покупка бумажных салфеток Kleenex на Ozon" +"2025-01-27","2025-01-30","Носочки для педикюра, хлопковые. Косметические носки многоразовые, для спа процедур. Размер 35-39. Цвет белый","Заказ Ozon №06644447-0385","","","by Zalina","Федоринин Сергей Вячеславович, ИП","MOSCOW , RU ","raiffeisen+receipts","-428.0","RUB","-428.0","Красота","Прочее","","Cosmetic pedicure socks from Ozon" +"2025-01-29","2025-02-01","Мощные плоские магниты прямоугольники Magtrade, 15x8х2 мм, комплект 30 шт.","Заказ Ozon №00211598-1334","","","by Anton","Власов Михаил Юрьевич, ИП","MOSCOW , RU ","raiffeisen+receipts","-850.49","RUB","-850.49","Расходники","мелкий ремонт","Магниты","Покупка магнитов для мелкого ремонта" +"2025-01-17","","Сетевой фильтр с предохранителем, AGNI, 8 розеток + 3 USB и 1 TYPE-C, удлинитель 2м, защитные шторки, негорючий пластик","Заказ Ozon №00211598-1326","","","by Anton","Покоевец Дмитрий Васильевич, ИП","","ozon+receipts","-2666.0","RUB","-2666.0","Расходники","Прочее","","Сетевой фильтр с предохранителем Ozon" +"2025-01-27","2025-01-30","Лифтинг-крем для шеи с пептидами и коллагеном Medi-Peel Premium Collagen Naite Thread Neck Cream 2.0 Южная Корея","Заказ Ozon №06644447-0385","","","by Zalina","ИП Sweet Home","MOSCOW , RU ","raiffeisen+receipts","-2703.0","RUB","-2703.0","Красота","Кремы","","Лифтинг-крем для шеи Medi-Peel (Ozon)" +"2025-01-22","2025-01-25","Смазка для кофемашин и кофеварки силиконовая ROX FSG-204 с пищевым допуском NSF H1/20 грамм","Заказ Ozon №00211598-1332","","","by Anton","РОКСОЛ, О00","MOSCOW , RU ","raiffeisen+receipts","-357.0","RUB","-357.0","Расходники","Прочее","","Смазка для кофемашины с Ozon" +"2025-01-22","2025-01-25","Смазка силиконовая с пищевым допуском NSF H1 EFELE SG-385 25г","Заказ Ozon №00211598-1332","","","by Anton","Сысоева Анастасия Сергеевна, ИП","MOSCOW , RU ","raiffeisen+receipts","-430.0","RUB","-430.0","Расходники","Прочее","","Silicone grease from Ozon" +"2025-01-22","2025-01-25","Пищевая силиконовая смазка для кофе-машин 50 мл ( 60 грамм )","Заказ Ozon №00211598-1332","","","by Anton","Никитин Александр Геннадьевич, ИП","MOSCOW , RU ","raiffeisen+receipts","-422.0","RUB","-422.0","Расходники","Прочее","","Смазка для кофе-машины (Ozon)" +"2025-01-27","2025-01-30","Гель для посудомоечной машины Finish, 600 мл","Заказ Ozon №06644447-0385","","","by Zalina","Алимп, ООО","MOSCOW , RU ","raiffeisen+receipts","-734.0","RUB","-734.0","Расходники","Средства для посудомоек","","Гель для посудомоечной машины Finish" +"2025-01-27","2025-01-30","Молоко безлактозное 1,8% 1 л, Parmalat Comfort | Количество: 3","Заказ Ozon №06644447-0386","","","by Zalina","OOO OZON","MOSCOW , RU ","raiffeisen+receipts","-294.0","RUB","-294.0","Еда","Продукты","Молоко","Покупка безлактозного молока на Ozon" +"2025-01-30","2025-02-03","Finish Power All in 1 таблетки для посудомоечной машины, 100 шт | Количество: 2","Заказ Ozon №00211598-1335","","","by Anton","OOO OZON","MOSCOW , RU ","raiffeisen+receipts","-3238.0","RUB","-3238.0","Расходники","Средства для посудомоек","","Покупка таблеток для посудомоечной машины" +"2025-01-27","2025-01-30","Варенье Ратибор малиновое, 680 г | Количество: 2","Заказ Ozon №06644447-0386","","","by Zalina","OOO OZON","MOSCOW , RU ","raiffeisen+receipts","-538.0","RUB","-538.0","Еда","Продукты","Варенье","Покупка малинового варенья на Ozon" +"2025-01-29","2025-01-31","Борщ","Заказ в Яндекс.Еде №20250129-1942","","*5728","by Anton","Кофемания","","yandex+receipts","-890.0","RUB","-890.0","Еда","Готовая","Рестораны","Заказ борща в Яндекс.Еде" +"2025-01-19","","Доставка","Заказ Ozon №06644447-0384","","","by Zalina","OOO OZON","","ozon+receipts","-189.0","RUB","-189.0","Логистика","Доставка","Услуга доставки","Доставка заказа Ozon" +"2025-01-20","2025-01-20","Сервисный сбор","Заказ в Яндекс.Еде №20250120-1730","","","by Zalina","YANDEX.EDA","","yandex+receipts","-44.0","RUB","-44.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еды" +"2025-01-19","","Finish Classic гель, для посудомоечной машины, 1 л","Заказ Ozon №06644447-0384","","","by Zalina","OOO OZON","","ozon+receipts","-395.0","RUB","-395.0","Расходники","Средства для посудомоек","","Finish Classic dishwasher gel from Ozon" +"2025-01-27","2025-01-30","Увлажняющая база с сиянием и с защитой от солнца Heimish Artless Glow Base SPF 50+ РА,40 мл","Заказ Ozon №06644447-0385","","","by Zalina","Шихмагомедова Саният, ИП","MOSCOW , RU ","raiffeisen+receipts","-1243.0","RUB","-1243.0","Красота","Кремы","","Heimish Glow Base from Ozon" +"2025-01-27","2025-01-30","Доставка","Заказ Ozon №06644447-0386","","","by Zalina","OOO OZON","MOSCOW , RU ","raiffeisen+receipts","-349.0","RUB","-349.0","Логистика","Доставка","Услуга доставки","Доставка заказа Ozon" +"2025-01-19","","Фильтр для очистителя воздуха Мі Air Purifier 2, 25, 3, 3C, ЗН с меткой RFID (M8R-FLH)","Заказ Ozon №00211598-1327","","","by Anton","Калабина Татьяна Сергеевна, ИП","","ozon+receipts","-1983.0","RUB","-1983.0","Расходники","Замена разных фильтров","","Фильтр для очистителя воздуха" +"2025-01-13","2025-01-15","Доставка","Заказ в Яндекс.Еде №20250113-1842","","*8416","by Zalina","YANDEX.EDA","","yandex+receipts","-335.0","RUB","-335.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Еды" +"2025-01-30","2025-02-03","Курьерская доставка партнером","Заказ Ozon №00211598-1335","","","by Anton","OOO OZON","MOSCOW , RU ","raiffeisen+receipts","-168.0","RUB","-168.0","Логистика","Доставка","Услуга доставки","Курьерская доставка Ozon" +"2025-01-31","2025-02-02","Пицца c мраморной говядиной и артишоками","Заказ в Яндекс.Еде №20250131-1812","","*5728","by Anton","I Like Wine 2.0","","yandex+receipts","-1340.0","RUB","-1340.0","Еда","Готовая","Пицца","Пицца из Яндекс.Еды" +"2025-01-29","2025-02-01","Мощные плоские магниты прямоугольники Magtrade, 20x10х2мм, комплект 10 шт.","Заказ Ozon №00211598-1334","","","by Anton","Власов Михаил Юрьевич, ИП","MOSCOW , RU ","raiffeisen+receipts","-586.61","RUB","-586.61","Расходники","мелкий ремонт","","Покупка магнитов для мелкого ремонта" +"2025-01-31","2025-02-02","Сервисный сбор","Заказ в Яндекс.Еде №20250131-1812","","*5728","by Anton","YANDEX.EDA","","yandex+receipts","-99.0","RUB","-99.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еды" +"2025-01-27","2025-01-30","Vichy Шариковый дезодорант для чувствительной кожи с защитой 48 часов, роликовый антиперспирант от запаха пота для женщин и мужчин, 50 мл","Заказ Ozon №06644447-0386","","","by Zalina","OOO OZON","MOSCOW , RU ","raiffeisen+receipts","-932.0","RUB","-932.0","Красота","Прочее","","Покупка дезодоранта Vichy на Ozon" +"2025-01-19","2025-01-22","Магнитная лента с клеевым слоем ширина 12,7 мм, длина 5 метров","Заказ Ozon №00211598-1328","","","by Anton","Соломахин Сергей Александрович, ИП","MOSCOW , RU ","raiffeisen+receipts","-472.0","RUB","-472.0","Расходники","мелкий ремонт","","Магнитная лента для мелкого ремонта" +"2025-01-27","2025-01-30","Леденцы без сахара с ксилитом Ksilibon вишня-черешня (3 упаковки)","Заказ Ozon №06644447-0385","","","by Zalina","ООО ""ЭРИН ХАЙДЕН РУС"", 000","MOSCOW , RU ","raiffeisen+receipts","-566.0","RUB","-566.0","Еда","Продукты","Десерты и сладости","Покупка леденцов на Ozon" +"2025-01-29","2025-02-01","Мощные плоские магниты прямоугольники Magtrade, 10x5x2 мм, комплект 30 шт.","Заказ Ozon №00211598-1334","","","by Anton","Власов Михаил Юрьевич, ИП","MOSCOW , RU ","raiffeisen+receipts","-517.9","RUB","-517.9","Расходники","мелкий ремонт","","Покупка магнитов для мелкого ремонта" +"2025-01-04","2025-01-08","Доставка","Заказ в Яндекс.Еде №20250104-1752","","","by Zalina","YANDEX.EDA","MOSCOW , RU ","raiffeisen+receipts","-290.0","RUB","-290.0","Логистика","Доставка","Услуга доставки","Доставка заказа из Яндекс.Еды" +"2025-01-13","2025-01-15","Борщ","Заказ в Яндекс.Еде №20250113-1842","","*8416","by Zalina","Кофемания","","yandex+receipts","-1780.0","RUB","-1780.0","Еда","Готовая","Рестораны","Борщ из Кофемании через Яндекс.Еду" +"2025-01-04","2025-01-08","Сервисный сбор","Заказ в Яндекс.Еде №20250104-1752","","","by Zalina","YANDEX.EDA","MOSCOW , RU ","raiffeisen+receipts","-99.0","RUB","-99.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еды" +"2025-01-29","2025-01-31","Сервисный сбор","Заказ в Яндекс.Еде №20250129-1942","","*5728","by Anton","YANDEX.EDA","","yandex+receipts","-99.0","RUB","-99.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еда" +"2025-01-30","2025-02-03","Пакет-майка OZON fresh","Заказ Ozon №00211598-1335","","","by Anton","OOO OZON","MOSCOW , RU ","raiffeisen+receipts","-9.0","RUB","-9.0","Еда","Продукты","Упаковка","Покупка пакета в OZON fresh" +"2025-01-20","2025-01-20","Мелаксен таблетки 3 мг 24 шт","Заказ в Яндекс.Еде №20250120-1730","","","by Zalina","Аптека Ригла","","yandex+receipts","-880.0","RUB","-880.0","Здоровье","Лекарства","","Покупка таблеток Мелаксен в аптеке" +"2025-01-04","2025-01-06","Сервисный сбор","Заказ в Яндекс.Еде №20250104-1657","","","by Zalina","YANDEX.EDA","Moskva , RU ","raiffeisen+receipts","-75.0","RUB","-75.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еды" +"2025-01-03","2025-01-06","Сервисный сбор","Заказ в Яндекс.Еде №20250103-1941","","","by Zalina","YANDEX.EDA","MOSCOW , RU ","raiffeisen+receipts","-99.0","RUB","-99.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еда" +"2025-01-10","2025-01-13","Груша и горгонзола","Заказ в Яндекс.Еде №20250110-1929","","","by Zalina","Zotman Pizza","MOSCOW , RU ","raiffeisen+receipts","-660.0","RUB","-660.0","Еда","Готовая","Пицца","Пицца из Яндекс.Еды Zotman Pizza" +"2025-01-23","2025-01-27","Супер-люкс бутерброд","Заказ в Яндекс.Еде №20250123-1233","","","by Zalina","Eggsellent","MOSCOW , RU ","raiffeisen+receipts","-850.0","RUB","-850.0","Еда","Готовая","Рестораны","Заказ из Eggsellent через Яндекс.Еду" +"2025-01-30","","BELLEHOME Набор полотенец махровых ""Малахит"" 3 шт (50x70, 50x100, 70х140) хлопок, бамбук","Заказ Ozon №06644447-0387","","","by Zalina","ООО ""ТЕКСТИЛЬНЫЙ ДОМ"", ООО","","ozon+receipts","-2599.0","RUB","-2599.0","Красота","Одежда","","Purchase of towels from Ozon" +"2025-01-10","2025-01-13","Сервисный сбор","Заказ в Яндекс.Еде №20250110-1929","","","by Zalina","YANDEX.EDA","MOSCOW , RU ","raiffeisen+receipts","-99.0","RUB","-99.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еда" +"2025-01-31","2025-02-02","Пицца Пепперони (Неострая)","Заказ в Яндекс.Еде №20250131-1812","","*5728","by Anton","I Like Wine 2.0","","yandex+receipts","-950.0","RUB","-950.0","Еда","Готовая","Пицца","Пицца из Яндекс.Еды" +"2025-01-13","2025-01-15","Сервисный сбор","Заказ в Яндекс.Еде №20250113-1842","","*8416","by Zalina","YANDEX.EDA","","yandex+receipts","-99.0","RUB","-99.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еды" +"2025-01-04","2025-01-06","Сырники жареные Уже Готово, 6 шт в наборе 420 г","Заказ в Яндекс.Еде №20250104-1657","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts","-430.0","RUB","-430.0","Еда","Продукты","Сырники","Покупка сырников в Азбуке Вкуса" +"2025-01-31","2025-02-02","Пицца Маргарита","Заказ в Яндекс.Еде №20250131-1812","","*5728","by Anton","I Like Wine 2.0","","yandex+receipts","-720.0","RUB","-720.0","Еда","Готовая","Пицца","Пицца из Яндекс.Еды" +"2025-01-30","","Халат Votex home женский","Заказ Ozon №06644447-0387","","","by Zalina","Вотекс, О00","","ozon+receipts","-1924.0","RUB","-1924.0","Красота","Одежда","","Халат Votex home женский Ozon" +"2025-01-27","2025-01-30","Доставка","Заказ в Яндекс.Еде №20250127-1940","","","by Zalina","YANDEX.EDA","MOSCOW , RU ","raiffeisen+receipts","-335.0","RUB","-335.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Еды" +"2025-01-04","2025-01-08","Капитан Барашек (на листьях салата) (Без лука, Картофель по-деревенски (120 г), Кетчуп)","Заказ в Яндекс.Еде №20250104-1752","","","by Zalina","Кофемания","MOSCOW , RU ","raiffeisen+receipts","-1500.0","RUB","-1500.0","Еда","Готовая","Бургеры","Бургер из Капитан Барашек через Яндекс.Еду" +"2025-01-04","2025-01-06","Сырники без сахара запеченные, 140г","Заказ в Яндекс.Еде №20250104-1657","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts","-214.0","RUB","-214.0","Еда","Продукты","Сырники","Покупка сырников в Азбуке Вкуса" +"2025-01-20","2025-01-20","Доставка","Заказ в Яндекс.Еде №20250120-1730","","","by Zalina","YANDEX.EDA","","yandex+receipts","-89.0","RUB","-89.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Еды" +"2025-01-30","2025-02-01","Сервисный сбор","Заказ в Яндекс.Еде №20250130-1038","","","by Zalina","YANDEX.EDA","Moskva , RU ","raiffeisen+receipts","-59.0","RUB","-59.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еды" +"2025-01-03","2025-01-06","Пицца Пепперони (Неострая)","Заказ в Яндекс.Еде №20250103-1941","","","by Zalina","I Like Wine 2.0","MOSCOW , RU ","raiffeisen+receipts","-950.0","RUB","-950.0","Еда","Готовая","Пицца","Пицца из Яндекс.Еды" +"2025-01-24","2025-01-27","Пицца c мраморной говядиной и артишоками","Заказ в Яндекс.Еде №20250124-1910","","","by Zalina","I Like Wine 2.0","MOSCOW , RU ","raiffeisen+receipts","-1340.0","RUB","-1340.0","Еда","Готовая","Пицца","Пицца из Яндекс.Еды" +"2025-01-28","2025-01-31","Доставка","Заказ в Яндекс.Еде №20250128-2022","","","by Zalina","YANDEX.EDA","MOSCOW , RU ","raiffeisen+receipts","-350.0","RUB","-350.0","Логистика","Доставка","Услуга доставки","Доставка заказа из Яндекс.Еды" +"2025-01-04","2025-01-08","Домашняя лапша","Заказ в Яндекс.Еде №20250104-1752","","","by Zalina","Кофемания","MOSCOW , RU ","raiffeisen+receipts","-790.0","RUB","-790.0","Еда","Готовая","Супы","Домашняя лапша из Кофемании" +"2025-01-03","2025-01-06","Доставка","Заказ в Яндекс.Еде №20250103-1941","","","by Zalina","YANDEX.EDA","MOSCOW , RU ","raiffeisen+receipts","-107.0","RUB","-107.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Еды" +"2025-01-24","2025-01-27","Доставка","Заказ в Яндекс.Еде №20250124-1910","","","by Zalina","YANDEX.EDA","MOSCOW , RU ","raiffeisen+receipts","-100.0","RUB","-100.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Еды" +"2025-01-30","2025-02-01","Куриная бризоль с пастой пенне, Уже Готово 230г","Заказ в Яндекс.Еде №20250130-1038","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts","-430.0","RUB","-430.0","Еда","Готовая","Рестораны","Куриная бризоль с пастой из Яндекс.Еды" +"2025-01-10","2025-01-13","Сырники без сахара запеченные 280г","Заказ в Яндекс.Еде №20250110-1700","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts","-365.0","RUB","-365.0","Еда","Продукты","Сырники","Покупка сырников в Азбуке Вкуса" +"2025-01-30","2025-02-01","Плов с цыпленком и овощами ?Уже Готово? 220 г, Россия","Заказ в Яндекс.Еде №20250130-1038","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts","-430.0","RUB","-430.0","Еда","Готовая","Рестораны","Плов с цыпленком из Азбуки Вкуса" +"2025-01-10","2025-01-13","Сервисный сбор","Заказ в Яндекс.Еде №20250110-1700","","","by Zalina","YANDEX.EDA","Moskva , RU ","raiffeisen+receipts","-47.0","RUB","-47.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еды" +"2025-01-03","2025-01-06","Пицца Маргарита","Заказ в Яндекс.Еде №20250103-1941","","","by Zalina","I Like Wine 2.0","MOSCOW , RU ","raiffeisen+receipts","-720.0","RUB","-720.0","Еда","Готовая","Пицца","Пицца из Яндекс.Еды" +"2025-01-10","2025-01-13","С базиликом и страчателлой","Заказ в Яндекс.Еде №20250110-1929","","","by Zalina","Zotman Pizza","MOSCOW , RU ","raiffeisen+receipts","-790.0","RUB","-790.0","Еда","Готовая","Пицца","Заказ пиццы в Zotman Pizza" +"2025-01-30","2025-02-01","Сырники жареные Уже Готово, 4 шт в наборе","Заказ в Яндекс.Еде №20250130-1038","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts","-322.0","RUB","-322.0","Еда","Продукты","Сырники","Покупка сырников в Азбуке Вкуса" +"2025-01-19","2025-01-21","Запеканка творожная с грушей и персиком, Уже Готово","Заказ в Яндекс.Еде №20250119-1549","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts","-397.0","RUB","-397.0","Еда","Готовая","Рестораны","Запеканка из Азбуки Вкуса через Яндекс.Еду" +"2025-01-10","2025-01-13","Варенье РАТИБОР Абрикос, 360г","Заказ в Яндекс.Еде №20250110-1700","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts","-269.0","RUB","-269.0","Еда","Продукты","Варенье","Покупка варенья в Азбуке Вкуса" +"2025-01-28","2025-01-31","Фирменный бургер (Medium)","Заказ в Яндекс.Еде №20250128-2022","","","by Zalina","Black Market","MOSCOW , RU ","raiffeisen+receipts","-1980.0","RUB","-1980.0","Еда","Готовая","Рестораны","Бургер в ресторане Black Market через Яндекс.Еду" +"2025-01-04","2025-01-06","Салат Оливье с мясом, ?Уже Готово?, 350г","Заказ в Яндекс.Еде №20250104-1657","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts","-592.0","RUB","-592.0","Еда","Продукты","Овощи","Салат Оливье в Азбуке Вкуса" +"2025-01-10","2025-01-13","С пармской ветчиной","Заказ в Яндекс.Еде №20250110-1929","","","by Zalina","Zotman Pizza","MOSCOW , RU ","raiffeisen+receipts","-880.0","RUB","-880.0","Еда","Готовая","Пицца","Заказ пиццы в Zotman Pizza через Яндекс.Еду" +"2025-01-23","2025-01-27","Миндально-вишневый латте 12/24","Заказ в Яндекс.Еде №20250123-1233","","","by Zalina","Eggsellent","MOSCOW , RU ","raiffeisen+receipts","-450.0","RUB","-450.0","Еда","Готовая","Рестораны","Миндально-вишневый латте из Яндекс.Еды" +"2025-01-10","2025-01-13","Сырники жареные Уже Готово, 4 шт в наборе","Заказ в Яндекс.Еде №20250110-1700","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts","-322.0","RUB","-322.0","Еда","Продукты","Сырники","Покупка жареных сырников в Азбуке Вкуса" +"2025-01-03","2025-01-06","Пицца c мраморной говядиной и артишоками","Заказ в Яндекс.Еде №20250103-1941","","","by Zalina","I Like Wine 2.0","MOSCOW , RU ","raiffeisen+receipts","-1340.0","RUB","-1340.0","Еда","Готовая","Пицца","Пицца из Яндекс.Еды" +"2025-01-27","2025-01-30","Сервисный сбор (добавлен автоматически)","Заказ в Яндекс.Еде №20250127-1940","","","by Zalina","YANDEX.EDA","MOSCOW , RU ","raiffeisen+receipts+virtual","-99.0","RUB","-99.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еды" +"2025-01-23","2025-01-27","Сервисный сбор","Заказ в Яндекс.Еде №20250123-1233","","","by Zalina","YANDEX.EDA","MOSCOW , RU ","raiffeisen+receipts","-21.0","RUB","-21.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еда" +"2025-01-08","2025-01-11","Доставка","Заказ в Яндекс.Еде №20250108-1911","","","by Zalina","YANDEX.EDA","MOSCOW , RU ","raiffeisen+receipts","-350.0","RUB","-350.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Еды" +"2025-01-04","2025-01-06","Кето сырники Азбука Life Pro","Заказ в Яндекс.Еде №20250104-1657","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts","-268.0","RUB","-268.0","Еда","Готовая","Рестораны","Кето сырники из Азбуки Вкуса (Яндекс.Еда)" +"2025-01-27","2025-01-30","Борщ","Заказ в Яндекс.Еде №20250127-1940","","","by Zalina","Кофемания","MOSCOW , RU ","raiffeisen+receipts","-1780.0","RUB","-1780.0","Еда","Готовая","Рестораны","Борщ из Кофемании через Яндекс.Еда" +"2025-01-25","2025-01-28","Упаковка заказа","Заказ из Яндекс.Лавки №250125-018-3079","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-12.0","RUB","-12.0","Логистика","Доставка","Упаковка заказа","Упаковка заказа из Яндекс.Лавки" +"2025-01-28","2025-01-31","Сервисный сбор","Заказ в Яндекс.Еде №20250128-2022","","","by Zalina","YANDEX.EDA","MOSCOW , RU ","raiffeisen+receipts","-99.0","RUB","-99.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еды" +"2025-01-25","2025-01-28","Фрикадельки в брусничном соусе с пюре","Заказ из Яндекс.Лавки №250125-018-3079","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-399.0","RUB","-399.0","Еда","Продукты","Мясо","Фрикадельки в брусничном соусе из Лавки" +"2025-01-24","2025-01-27","Пицца Маргарита","Заказ в Яндекс.Еде №20250124-1910","","","by Zalina","I Like Wine 2.0","MOSCOW , RU ","raiffeisen+receipts","-720.0","RUB","-720.0","Еда","Готовая","Пицца","Пицца Маргарита из Яндекс.Еды" +"2025-01-05","2025-01-05","Конфеты Мишка косолапый Красный Октябрь","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-243.06","RUB","-243.06","Еда","Продукты","Конфеты","Покупка конфет в Яндекс.Лавке" +"2025-01-24","2025-01-27","Пицца Пепперони (Неострая)","Заказ в Яндекс.Еде №20250124-1910","","","by Zalina","I Like Wine 2.0","MOSCOW , RU ","raiffeisen+receipts","-950.0","RUB","-950.0","Еда","Готовая","Пицца","Пицца из Яндекс.Еды" +"2025-01-05","2025-01-05","Леденцы Halls мёд-лимон","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-32.06","RUB","-32.06","Еда","Продукты","Конфеты","Покупка леденцов Halls в Яндекс.Лавке" +"2025-01-19","2025-01-21","Сметана Ростагроэкспорт 15%, 250 г","Заказ в Яндекс.Еде №20250119-1549","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts","-73.0","RUB","-73.0","Еда","Продукты","Молочные продукты","Покупка сметаны в Азбуке Вкуса" +"2025-01-19","2025-01-21","Сырники без сахара запеченные, 140г","Заказ в Яндекс.Еде №20250119-1549","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts","-214.0","RUB","-214.0","Еда","Продукты","Сырники","Покупка сырников в Азбуке Вкуса" +"2025-01-24","2025-01-27","Сервисный сбор","Заказ в Яндекс.Еде №20250124-1910","","","by Zalina","YANDEX.EDA","MOSCOW , RU ","raiffeisen+receipts","-99.0","RUB","-99.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еды" +"2025-01-21","2025-01-24","Доставка","Заказ из Яндекс.Лавки №250121-096-7600","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-159.0","RUB","-159.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Лавки" +"2025-01-05","2025-01-05","Батон Нарезной Черёмушки","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-48.06","RUB","-48.06","Еда","Продукты","Хлеб","Покупка батона в Яндекс.Лавке" +"2025-01-25","2025-01-28","Доставка","Заказ из Яндекс.Лавки №250125-018-3079","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-119.0","RUB","-119.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Лавки" +"2025-01-21","2025-01-24","Лук репчатый","Заказ из Яндекс.Лавки №250121-096-7600","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-65.0","RUB","-65.0","Еда","Продукты","Овощи","Покупка лука в Яндекс.Лавке" +"2025-01-08","2025-01-11","Фирменный бургер (Medium)","Заказ в Яндекс.Еде №20250108-1911","","","by Zalina","Black Market","MOSCOW , RU ","raiffeisen+receipts","-1980.0","RUB","-1980.0","Еда","Готовая","Бургеры","Бургер из Black Market через Яндекс.Еда" +"2025-01-19","2025-01-21","Сырники жареные Уже Готово, 4 шт в наборе","Заказ в Яндекс.Еде №20250119-1549","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts","-644.0","RUB","-644.0","Еда","Продукты","Сырники","Покупка жареных сырников в Азбуке Вкуса" +"2025-01-05","2025-01-05","Яйцо СО","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-128.06","RUB","-128.06","Еда","Продукты","","Яйца из Яндекс.Лавки" +"2025-01-05","2025-01-05","Половина цыплёнка Из Лавки","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-856.12","RUB","-856.12","Еда","Продукты","Птица","Покупка цыплёнка в Яндекс.Лавке" +"2025-01-05","2025-01-05","Упаковка заказа","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-12.0","RUB","-12.0","Логистика","Доставка","Упаковка заказа","Упаковка заказа из Яндекс.Лавки" +"2025-01-21","2025-01-24","Батон Нарезной Черёмушки","Заказ из Яндекс.Лавки №250121-096-7600","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-69.0","RUB","-69.0","Еда","Продукты","Хлеб","Покупка батона в Яндекс.Лавке" +"2025-01-21","2025-01-24","Петрушка","Заказ из Яндекс.Лавки №250121-096-7600","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-75.0","RUB","-75.0","Еда","Продукты","Овощи","Покупка петрушки в Яндекс.Лавке" +"2025-01-21","2025-01-24","Упаковка заказа","Заказ из Яндекс.Лавки №250121-096-7600","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-12.0","RUB","-12.0","Логистика","Доставка","Упаковка заказа","Упаковка заказа из Яндекс.Лавки" +"2025-01-25","2025-01-28","Батон Нарезной Черёмушки","Заказ из Яндекс.Лавки №250125-018-3079","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-69.0","RUB","-69.0","Еда","Продукты","Хлеб","Покупка батона в Яндекс.Лавке" +"2025-01-19","2025-01-21","Сервисный сбор","Заказ в Яндекс.Еде №20250119-1549","","","by Zalina","YANDEX.EDA","Moskva , RU ","raiffeisen+receipts","-66.0","RUB","-66.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еда" +"2025-01-25","2025-01-28","Кабачки","Заказ из Яндекс.Лавки №250125-018-3079","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-159.0","RUB","-159.0","Еда","Продукты","Овощи","Покупка кабачков в Яндекс.Лавке" +"2025-01-21","2025-01-24","Морковь мытая","Заказ из Яндекс.Лавки №250121-096-7600","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-55.0","RUB","-55.0","Еда","Продукты","Овощи","Покупка моркови в Яндекс.Лавке" +"2025-01-25","2025-01-28","Грудка с булгуром и соусом Из Лавки","Заказ из Яндекс.Лавки №250125-018-3079","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-369.0","RUB","-369.0","Еда","Продукты","","Грудка с булгуром из Яндекс.Лавки" +"2025-01-14","2025-01-17","Конфеты Бабаевская белочка Бабаевский","Заказ из Яндекс.Лавки №250114-058-3353","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-293.0","RUB","-293.0","Еда","Продукты","Конфеты","Покупка конфет в Яндекс.Лавке" +"2025-01-05","2025-01-05","Прокладки Либресс Ультра Нормал","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-124.06","RUB","-124.06","Расходники","Санитарное","","Покупка прокладок в Яндекс.Лавке" +"2025-01-14","2025-01-17","Чай чёрный Golden Ceylon Greenfield","Заказ из Яндекс.Лавки №250114-058-3353","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-437.0","RUB","-437.0","Еда","Продукты","Напитки","Чай из Яндекс.Лавки" +"2025-01-14","2025-01-17","Яйцо СО","Заказ из Яндекс.Лавки №250114-058-3353","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-149.0","RUB","-149.0","Еда","Продукты","Яйца","Покупка яиц в Яндекс.Лавке" +"2025-01-05","2025-01-05","Прокладки Либресс Ультра ночная защита","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-124.06","RUB","-124.06","Расходники","Санитарное","","Покупка прокладок в Яндекс.Лавке" +"2025-01-08","2025-01-11","Сервисный сбор","Заказ в Яндекс.Еде №20250108-1911","","","by Zalina","YANDEX.EDA","MOSCOW , RU ","raiffeisen+receipts","-99.0","RUB","-99.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еды" +"2025-01-05","2025-01-05","Конфеты Осенний вальс Рот Фронт","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-248.07","RUB","-248.07","Еда","Продукты","Конфеты","Покупка конфет в Яндекс.Лавке" +"2025-01-25","2025-01-28","Цыплёнок в пряном маринаде","Заказ из Яндекс.Лавки №250125-018-3079","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-479.0","RUB","-479.0","Еда","Продукты","Птица","Цыплёнок в маринаде из Яндекс.Лавки" +"2025-01-11","2025-01-11","Цыплёнок в пряном маринаде","Заказ из Яндекс.Лавки №250111-174-7476","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-465.0","RUB","-465.0","Еда","Продукты","Птица","Покупка цыплёнка в Яндекс.Лавке" +"2025-01-21","2025-01-24","Филе бедра цыплёнка-бройлера Троекурово","Заказ из Яндекс.Лавки №250121-096-7600","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-389.0","RUB","-389.0","Еда","Продукты","Птица","Покупка курицы в Яндекс.Лавке" +"2025-01-05","2025-01-05","Хлопья овсяные Геркулес Русский продукт","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-78.06","RUB","-78.06","Еда","Продукты","Каши","Овсяные хлопья Геркулес из Яндекс.Лавки" +"2025-01-21","2025-01-24","Хурма Бычье сердце","Заказ из Яндекс.Лавки №250121-096-7600","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-199.0","RUB","-199.0","Еда","Продукты","Фрукты","Покупка хурмы в Яндекс.Лавке" +"2025-01-26","2025-01-28","Соус томатный Basilico Barilla базилик","Заказ из Яндекс.Лавки №250126-093-2352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-399.0","RUB","-399.0","Еда","Продукты","Упаковка","Покупка соуса в Яндекс.Лавке" +"2025-01-05","2025-01-05","Огурцы короткоплодные","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-215.06","RUB","-215.06","Еда","Продукты","Овощи","Покупка огурцов в Яндекс.Лавке" +"2025-01-05","2025-01-05","Набор для глинтвейна Из Лавки","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-98.07","RUB","-98.07","Еда","Продукты","Напитки","Набор для глинтвейна из Яндекс.Лавки" +"2025-01-14","2025-01-17","Колбаса Докторская Егорьевская","Заказ из Яндекс.Лавки №250114-058-3353","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-319.0","RUB","-319.0","Еда","Продукты","Мясо","Покупка колбасы в Яндекс.Лавке" +"2025-01-05","2025-01-05","Набор Пряничный домик Из Лавки большой","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-678.07","RUB","-678.07","Еда","Продукты","Десерты и сладости","Пряничный домик из Яндекс.Лавки" +"2025-01-11","2025-01-11","Лосось с пастой в соусе Из Лавки","Заказ из Яндекс.Лавки №250111-174-7476","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-397.0","RUB","-397.0","Еда","Продукты","Рыба","Лосось с пастой в Яндекс.Лавке" +"2025-01-05","2025-01-05","Сахар-рафинад Русский сахар","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-236.12","RUB","-236.12","Еда","Продукты","","Покупка сахара в Яндекс.Лавке" +"2025-01-14","2025-01-17","Вензель с вишней","Заказ из Яндекс.Лавки №250114-058-3353","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-175.0","RUB","-175.0","Еда","Продукты","Десерты и сладости","Вензель с вишней из Яндекс.Лавки" +"2025-01-29","2025-01-31","Доставка","Заказ из Яндекс.Лавки №250129-055-7883","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-159.0","RUB","-159.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Лавки" +"2025-01-11","2025-01-11","Пирожное кейк-попс Из Лавки лесные ягоды","Заказ из Яндекс.Лавки №250111-174-7476","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-115.0","RUB","-115.0","Еда","Продукты","Десерты и сладости","Пирожное кейк-попс из Яндекс.Лавки" +"2025-01-05","2025-01-05","Изюм Флейм Джамбо Из Лавки","Заказ из Яндекс.Лавки №250105-151-0017","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-128.07","RUB","-128.07","Еда","Продукты","Фрукты","Покупка изюма в Яндекс.Лавке" +"2025-01-14","2025-01-17","Картофель красный","Заказ из Яндекс.Лавки №250114-058-3353","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-99.0","RUB","-99.0","Еда","Продукты","Овощи","Покупка картофеля в Яндекс.Лавке" +"2025-01-14","2025-01-17","Кольцо заварное с крем-чизом","Заказ из Яндекс.Лавки №250114-058-3353","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-169.0","RUB","-169.0","Еда","Продукты","Десерты и сладости","Заварное кольцо в Яндекс.Лавке" +"2025-01-14","2025-01-17","Конфеты Мишка косолапый Красный Октябрь","Заказ из Яндекс.Лавки №250114-058-3353","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-265.0","RUB","-265.0","Еда","Продукты","Десерты и сладости","Покупка конфет в Яндекс.Лавке" +"2025-01-26","2025-01-28","Черри Эко-культура круглые красные","Заказ из Яндекс.Лавки №250126-093-2352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-299.0","RUB","-299.0","Еда","Продукты","Овощи","Покупка черри в Яндекс.Лавке" +"2025-01-26","2025-01-28","Макароны Fusilli Pasteroni №125","Заказ из Яндекс.Лавки №250126-093-2352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-83.0","RUB","-83.0","Еда","Продукты","Макароны","Покупка макарон в Яндекс.Лавке" +"2025-01-14","2025-01-17","Доставка","Заказ из Яндекс.Лавки №250114-058-3353","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-119.0","RUB","-119.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Лавки" +"2025-01-11","2025-01-11","Пюре картофельное Из Лавки","Заказ из Яндекс.Лавки №250111-174-7476","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-295.0","RUB","-295.0","Еда","Продукты","Овощи","Mashed potatoes from Yandex.Lavka" +"2025-01-26","2025-01-28","Перчатки хозяйственные Aviora М","Заказ из Яндекс.Лавки №250126-093-2352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-65.0","RUB","-65.0","Расходники","Прочее","","Перчатки хозяйственные из Яндекс.Лавки" +"2025-01-11","2025-01-11","Морс черничный Из Лавки","Заказ из Яндекс.Лавки №250111-174-7476","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-186.0","RUB","-186.0","Еда","Продукты","Напитки","Покупка морса в Яндекс.Лавке" +"2025-01-26","2025-01-28","Упаковка заказа","Заказ из Яндекс.Лавки №250126-093-2352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-12.0","RUB","-12.0","Логистика","Доставка","Упаковка заказа","Упаковка заказа из Яндекс.Лавки" +"2025-01-11","2025-01-11","Эклер классический Из Лавки","Заказ из Яндекс.Лавки №250111-174-7476","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-115.0","RUB","-115.0","Еда","Продукты","Десерты и сладости","Покупка эклера в Яндекс.Лавке" +"2025-01-11","2025-01-11","Мандарины мини","Заказ из Яндекс.Лавки №250111-174-7476","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-285.0","RUB","-285.0","Еда","Продукты","Фрукты","Покупка мандаринов в Яндекс.Лавке" +"2025-01-29","2025-01-31","Изюм Флейм Джамбо Из Лавки","Заказ из Яндекс.Лавки №250129-055-7883","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-149.0","RUB","-149.0","Еда","Продукты","Фрукты","Покупка изюма в Яндекс.Лавке" +"2025-01-14","2025-01-17","Упаковка заказа","Заказ из Яндекс.Лавки №250114-058-3353","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-12.0","RUB","-12.0","Логистика","Доставка","Упаковка заказа","Упаковка заказа из Яндекс.Лавки" +"2025-01-12","2025-01-12","Соус томатный Arrabbiata Barilla с чили","Заказ из Яндекс.Лавки №250112-046-3849","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-293.0","RUB","-293.0","Еда","Продукты","Соусы","Соус из Яндекс.Лавки" +"2025-01-12","2025-01-12","Леденцы Halls мёд-лимон","Заказ из Яндекс.Лавки №250112-046-3849","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-44.0","RUB","-44.0","Еда","Продукты","Конфеты","Halls lozenges from Yandex.Lavka" +"2025-01-26","2025-01-28","Яйцо СО Из Лавки","Заказ из Яндекс.Лавки №250126-093-2352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-159.0","RUB","-159.0","Еда","Продукты","Яйца","Покупка яиц в Яндекс.Лавке" +"2025-01-26","2025-01-28","Конфеты Осенний вальс Рот Фронт фундук","Заказ из Яндекс.Лавки №250126-093-2352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-254.0","RUB","-254.0","Еда","Продукты","Конфеты","Покупка конфет в Яндекс.Лавке" +"2025-01-26","2025-01-28","Конфеты Бабаевская белочка Бабаевский","Заказ из Яндекс.Лавки №250126-093-2352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-251.0","RUB","-251.0","Еда","Продукты","Конфеты","Покупка конфет в Яндекс.Лавке" +"2025-01-08","2025-01-10","Доставка","Заказ из Яндекс.Лавки №250108-168-4040","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-159.0","RUB","-159.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Лавки" +"2025-01-16","2025-01-20","Мороженое Из Лавки глинтвейн","Заказ из Яндекс.Лавки №250116-130-9352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-129.0","RUB","-129.0","Еда","Продукты","Десерты и сладости","Мороженое и глинтвейн из Яндекс.Лавки" +"2025-01-26","2025-01-28","Фарш из телятины Из Лавки","Заказ из Яндекс.Лавки №250126-093-2352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-379.0","RUB","-379.0","Еда","Продукты","Мясо","Покупка фарша из телятины в Яндекс.Лавке" +"2025-01-11","2025-01-11","Доставка","Заказ из Яндекс.Лавки №250111-174-7476","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-119.0","RUB","-119.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Лавки" +"2025-01-29","2025-01-31","Виноград Кишмиш розовый без косточек","Заказ из Яндекс.Лавки №250129-055-7883","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-299.0","RUB","-299.0","Еда","Продукты","Фрукты","Покупка винограда в Яндекс.Лавке" +"2025-01-29","2025-01-31","Мини-кексы ванильные Из Лавки","Заказ из Яндекс.Лавки №250129-055-7883","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-169.0","RUB","-169.0","Еда","Продукты","Десерты и сладости","Мини-кексы ванильные из Яндекс.Лавки" +"2025-01-16","2025-01-20","Пирожное Вупи пай с джемом Из Лавки","Заказ из Яндекс.Лавки №250116-130-9352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-219.0","RUB","-219.0","Еда","Продукты","Десерты и сладости","Пирожное Вупи пай из Яндекс.Лавки" +"2025-01-16","2025-01-20","Грудка с булгуром и соусом Из Лавки","Заказ из Яндекс.Лавки №250116-130-9352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-369.0","RUB","-369.0","Еда","Продукты","","Грудка с булгуром из Яндекс.Лавки" +"2025-01-12","2025-01-12","Фарш из телятины Из Лавки","Заказ из Яндекс.Лавки №250112-046-3849","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-369.0","RUB","-369.0","Еда","Продукты","Мясо","Фарш из телятины в Яндекс.Лавке" +"2025-01-16","2025-01-20","Огурцы Корнишон","Заказ из Яндекс.Лавки №250116-130-9352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-229.0","RUB","-229.0","Еда","Продукты","Овощи","Покупка огурцов в Яндекс.Лавке" +"2025-01-26","2025-01-28","Лимонад Из Лавки с соком грейпфрута","Заказ из Яндекс.Лавки №250126-093-2352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-149.0","RUB","-149.0","Еда","Продукты","Напитки","Lemonade from Yandex.Lavka" +"2025-01-29","2025-01-31","Кекс Нижегородский хлеб","Заказ из Яндекс.Лавки №250129-055-7883","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-398.0","RUB","-398.0","Еда","Продукты","Десерты и сладости","Покупка кекса в Яндекс.Лавке" +"2025-01-01","2025-01-04","Цыплёнок в пряном маринаде","Заказ из Яндекс.Лавки №250101-078-9877","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-359.0","RUB","-359.0","Еда","Продукты","Птица","Цыплёнок в маринаде из Яндекс.Лавки" +"2025-01-26","2025-01-28","Конфеты Мишка косолапый Красный Октябрь","Заказ из Яндекс.Лавки №250126-093-2352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-265.0","RUB","-265.0","Еда","Продукты","Конфеты","Покупка конфет в Яндекс.Лавке" +"2025-01-29","2025-01-31","Улитка Из Лавки изюм-заварной крем","Заказ из Яндекс.Лавки №250129-055-7883","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-298.0","RUB","-298.0","Еда","Продукты","Десерты и сладости","Покупка изюма-заварного крема в Яндекс.Лавке" +"2025-01-12","2025-01-12","Доставка","Заказ из Яндекс.Лавки №250112-046-3849","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-159.0","RUB","-159.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Лавки" +"2025-01-11","2025-01-11","Упаковка заказа","Заказ из Яндекс.Лавки №250111-174-7476","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-12.0","RUB","-12.0","Логистика","Доставка","Упаковка заказа","Упаковка заказа из Яндекс.Лавки" +"2025-01-08","2025-01-10","Варенье малиновое Из Лавки","Заказ из Яндекс.Лавки №250108-168-4040","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-249.0","RUB","-249.0","Еда","Продукты","Варенье","Покупка малинового варенья в Яндекс.Лавке" +"2025-01-16","2025-01-20","Доставка","Заказ из Яндекс.Лавки №250116-130-9352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-119.0","RUB","-119.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Лавки" +"2025-01-26","2025-01-28","Лимонад Из Лавки с соком грейпфрута","Заказ из Яндекс.Лавки №250126-093-2352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-149.0","RUB","-149.0","Еда","Продукты","Напитки","Lemonade from Yandex.Lavka" +"2025-01-01","2025-01-04","Огурцы Корнишон","Заказ из Яндекс.Лавки №250101-078-9877","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-299.0","RUB","-299.0","Еда","Продукты","Овощи","Покупка огурцов в Яндекс.Лавке" +"2025-01-08","2025-01-10","Авокадо Хасс Артфрут","Заказ из Яндекс.Лавки №250108-168-4040","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-615.0","RUB","-615.0","Еда","Продукты","Овощи","Покупка авокадо в Яндекс.Лавке" +"2025-01-16","2025-01-20","Морковь мытая","Заказ из Яндекс.Лавки №250116-130-9352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-55.0","RUB","-55.0","Еда","Продукты","Овощи","Покупка моркови в Яндекс.Лавке" +"2025-01-12","2025-01-12","Макароны Fusilli Pasteroni №125","Заказ из Яндекс.Лавки №250112-046-3849","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-75.0","RUB","-75.0","Еда","Продукты","Макароны","Покупка макарон в Яндекс.Лавке" +"2025-01-12","2025-01-12","Упаковка заказа","Заказ из Яндекс.Лавки №250112-046-3849","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-12.0","RUB","-12.0","Логистика","Доставка","Упаковка заказа","Упаковка заказа из Яндекс.Лавки" +"2025-01-01","2025-01-04","Пюре картофельное Из Лавки","Заказ из Яндекс.Лавки №250101-078-9877","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-231.0","RUB","-231.0","Еда","Продукты","Овощи","Покупка картофельного пюре в Яндекс.Лавке" +"2025-01-12","2025-01-12","Виноград Мерседес","Заказ из Яндекс.Лавки №250112-046-3849","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-289.0","RUB","-289.0","Еда","Продукты","Фрукты","Покупка винограда в Яндекс.Лавке" +"2025-01-19","2025-01-21","Огурцы короткоплодные","Заказ из Яндекс.Лавки №250119-020-3606","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-239.0","RUB","-239.0","Еда","Продукты","Овощи","Покупка огурцов в Яндекс.Лавке" +"2025-01-19","2025-01-21","Перец чёрный горошек Kotanyi","Заказ из Яндекс.Лавки №250119-020-3606","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-89.0","RUB","-89.0","Еда","Продукты","Специи","Покупка перца в Яндекс.Лавке" +"2025-01-12","2025-01-12","Батон Нарезной Черёмушки","Заказ из Яндекс.Лавки №250112-046-3849","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-59.0","RUB","-59.0","Еда","Продукты","Хлеб","Покупка батона в Яндекс.Лавке" +"2025-01-01","2025-01-04","Пломбир Из Лавки конфеты ванильные","Заказ из Яндекс.Лавки №250101-078-9877","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-179.0","RUB","-179.0","Еда","Продукты","Десерты и сладости","Покупка пломбира и конфет в Лавке" +"2025-01-24","2025-01-27","Доставка","Заказ из Яндекс.Лавки №250124-031-0962","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-119.0","RUB","-119.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Лавки" +"2025-01-19","2025-01-21","Петрушка","Заказ из Яндекс.Лавки №250119-020-3606","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-55.0","RUB","-55.0","Еда","Продукты","Овощи","Покупка петрушки в Яндекс.Лавке" +"2025-01-12","2025-01-12","Сыр тёртый Пармезан Cheese Gallery","Заказ из Яндекс.Лавки №250112-046-3849","","","by Zalina","YANDEX.LAVKA","","yandex+receipts","-180.0","RUB","-180.0","Еда","Продукты","Молочные продукты","Сыр из Яндекс.Лавки" +"2025-01-24","2025-01-27","Молоко безлактозное 1,8% Parmalat","Заказ из Яндекс.Лавки №250124-031-0962","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-100.67","RUB","-100.67","Еда","Продукты","Молоко","Покупка безлактозного молока в Яндекс.Лавке" +"2025-01-01","2025-01-04","Доставка","Заказ из Яндекс.Лавки №250101-078-9877","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-159.0","RUB","-159.0","Логистика","Доставка","Услуга доставки","Доставка из Яндекс.Лавки" +"2025-01-16","2025-01-20","Филе бедра цыплёнка-бройлера Троекурово","Заказ из Яндекс.Лавки №250116-130-9352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-389.0","RUB","-389.0","Еда","Продукты","Птица","Покупка курицы в Яндекс.Лавке" +"2025-01-19","2025-01-21","Хлеб пшеничный American Sandwich Harry's","Заказ из Яндекс.Лавки №250119-020-3606","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-149.0","RUB","-149.0","Еда","Продукты","Хлеб","Покупка хлеба в Яндекс.Лавке" +"2025-01-19","2025-01-21","Картофель отборный","Заказ из Яндекс.Лавки №250119-020-3606","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-239.0","RUB","-239.0","Еда","Продукты","Овощи","Покупка картофеля в Яндекс.Лавке" +"2025-01-19","2025-01-21","Крахмал картофельный Haas","Заказ из Яндекс.Лавки №250119-020-3606","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-118.0","RUB","-118.0","Еда","Продукты","Упаковка","Покупка крахмала в Яндекс.Лавке" +"2025-01-01","2025-01-04","Маффин с шоколадной начинкой Из Лавки","Заказ из Яндекс.Лавки №250101-078-9877","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-119.0","RUB","-119.0","Еда","Продукты","Десерты и сладости","Маффин из Яндекс.Лавки" +"2025-01-29","2025-01-31","Упаковка заказа","Заказ из Яндекс.Лавки №250129-055-7883","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-12.0","RUB","-12.0","Логистика","Доставка","Упаковка заказа","Упаковка заказа из Яндекс.Лавки" +"2025-01-24","2025-01-27","Молоко безлактозное 1,8% Parmalat","Заказ из Яндекс.Лавки №250124-031-0962","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-100.66","RUB","-100.66","Еда","Продукты","Молоко","Покупка безлактозного молока в Яндекс.Лавке" +"2025-01-08","2025-01-10","Упаковка заказа","Заказ из Яндекс.Лавки №250108-168-4040","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-12.0","RUB","-12.0","Логистика","Доставка","Упаковка заказа","Упаковка заказа из Яндекс.Лавки" +"2025-01-01","2025-01-04","Лимон и имбирь протёртые Из Лавки","Заказ из Яндекс.Лавки №250101-078-9877","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-119.0","RUB","-119.0","Еда","Продукты","Овощи","Лимон и имбирь из Яндекс.Лавки" +"2025-01-24","2025-01-27","Виноград Кишмиш розовый без косточек","Заказ из Яндекс.Лавки №250124-031-0962","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-234.67","RUB","-234.67","Еда","Продукты","Фрукты","Покупка винограда в Яндекс.Лавке" +"2025-01-31","2025-01-31","Бананы Просто Азбука вес (0.99)","Заказ в Яндекс.Еде №20250131-2352","","","by Anton","Азбука вкуса","","yandex+receipts+paired","-286.11","RUB","-286.11","Еда","Продукты","Фрукты","Покупка бананов в Азбуке Вкуса" +"2025-01-19","2025-01-21","Тильзитер Из Лавки нарезка","Заказ из Яндекс.Лавки №250119-020-3606","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-209.0","RUB","-209.0","Еда","Продукты","Молочные продукты","Тильзитер cheese from Yandex.Lavka" +"2025-01-16","2025-01-20","Упаковка заказа","Заказ из Яндекс.Лавки №250116-130-9352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-12.0","RUB","-12.0","Логистика","Доставка","Упаковка заказа","Упаковка заказа из Яндекс.Лавки" +"2025-01-31","2025-01-31","Салат оливье с мясом от бренд-шефа (3.08)","Заказ в Яндекс.Еде №20250131-2352","","","by Anton","Азбука вкуса","","yandex+receipts+paired","-520.52","RUB","-520.52","Еда","Готовая","Рестораны","Салат оливье из Яндекс.Еды" +"2025-01-16","2025-01-20","Лук репчатый","Заказ из Яндекс.Лавки №250116-130-9352","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-65.0","RUB","-65.0","Еда","Продукты","Овощи","Покупка лука в Яндекс.Лавке" +"2025-01-31","2025-01-31","Нектар Вишня осветленный Я 0,97л","Заказ в Яндекс.Еде №20250131-2352","","","by Anton","Азбука вкуса","","yandex+receipts+paired","-494.0","RUB","-494.0","Еда","Продукты","Напитки","Покупка нектара в Азбуке Вкуса" +"2025-01-24","2025-01-24","Нектар Rich Вишня 1л","Заказ в Яндекс.Еде №20250125-0016","","","by Anton","Дикси","","yandex+receipts+refunded","-708.0","RUB","-708.0","Еда","Продукты","Напитки","Покупка нектара Rich в Яндекс.Еде" +"2025-01-24","2025-01-27","Упаковка заказа","Заказ из Яндекс.Лавки №250124-031-0962","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-12.0","RUB","-12.0","Логистика","Доставка","Упаковка заказа","Упаковка заказа из Яндекс.Лавки" +"2025-01-24","2025-01-27","Батон Нарезной Черёмушки","Заказ из Яндекс.Лавки №250124-031-0962","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-4.66","RUB","-4.66","Еда","Продукты","Хлеб","Покупка батона в Яндекс.Лавке" +"2025-01-19","2025-01-21","Фарш из телятины Из Лавки","Заказ из Яндекс.Лавки №250119-020-3606","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-758.0","RUB","-758.0","Еда","Продукты","Мясо","Фарш из телятины в Яндекс.Лавке" +"2025-01-24","2025-01-27","Сырники жареные Уже Готово, 4 шт в наборе","Заказ в Яндекс.Еде №20250124-1228","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts+paired","-644.0","RUB","-644.0","Еда","Продукты","Сырники","Покупка жареных сырников в Азбуке Вкуса" +"2025-01-31","2025-01-31","Куриная бризоль с пастой пенне, Уже Готово 230г","Заказ в Яндекс.Еде №20250131-2352","","","by Anton","Азбука вкуса","","yandex+receipts+paired","-430.0","RUB","-430.0","Еда","Готовая","Рестораны","Куриная бризоль с пастой из Яндекс.Еды" +"2025-01-31","2025-02-02","Сервисный сбор","Заказ в Яндекс.Еде №20250131-1812","","*5728","by Anton","YANDEX.EDA","","yandex+receipts","-99.0","RUB","-99.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еды" +"2025-01-24","2025-01-27","Мороженое йогуртовое «Лавка 100»","Заказ из Яндекс.Лавки №250124-031-0962","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-334.67","RUB","-334.67","Еда","Продукты","Десерты и сладости","Мороженое йогуртовое из Яндекс.Лавки" +"2025-01-01","2025-01-04","Упаковка заказа","Заказ из Яндекс.Лавки №250101-078-9877","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-12.0","RUB","-12.0","Логистика","Доставка","Упаковка заказа","Упаковка заказа из Яндекс.Лавки" +"2025-01-19","2025-01-21","Огурцы корнишоны маринованные Federici","Заказ из Яндекс.Лавки №250119-020-3606","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-277.0","RUB","-277.0","Еда","Продукты","Овощи","Покупка маринованных огурцов в Яндекс.Лавке" +"2025-01-24","2025-01-27","Огурцы короткоплодные","Заказ из Яндекс.Лавки №250124-031-0962","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-174.66","RUB","-174.66","Еда","Продукты","Овощи","Покупка огурцов в Яндекс.Лавке" +"2025-01-19","2025-01-21","Кабачки","Заказ из Яндекс.Лавки №250119-020-3606","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-135.0","RUB","-135.0","Еда","Продукты","Овощи","Покупка кабачков в Яндекс.Лавке" +"2025-01-24","2025-01-27","Средство дезинфицирующее для рук Из Лавки","Заказ из Яндекс.Лавки №250124-031-0962","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-54.67","RUB","-54.67","Расходники","Санитарное","","Hand sanitizer from Yandex.Lavka" +"2025-01-24","2025-01-27","Лимонад Из Лавки с соком грейпфрута","Заказ из Яндекс.Лавки №250124-031-0962","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-84.67","RUB","-84.67","Еда","Продукты","Напитки","Лимонад из Яндекс.Лавки" +"2025-01-19","2025-01-21","Упаковка заказа","Заказ из Яндекс.Лавки №250119-020-3606","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-12.0","RUB","-12.0","Логистика","Доставка","Упаковка заказа","Упаковка заказа из Яндекс.Лавки" +"2025-01-24","2025-01-27","Сервисный сбор","Заказ в Яндекс.Еде №20250124-1228","","","by Zalina","YANDEX.EDA","Moskva , RU ","raiffeisen+receipts+paired","-71.0","RUB","-71.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еды" +"2025-01-08","2025-01-10","Кекс Коломенский Мастер Пироговъ, с изюмом, 400 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-1206.0","RUB","-208.0","Еда","Продукты","Десерты и сладости","Покупка кекса в Самокате" +"2025-01-19","2025-01-21","Опята маринованные Из Лавки","Заказ из Яндекс.Лавки №250119-020-3606","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-205.0","RUB","-205.0","Еда","Продукты","Овощи","Маринованные опята из Яндекс.Лавки" +"2025-01-24","2025-01-27","Лимонад Из Лавки с соком грейпфрута","Заказ из Яндекс.Лавки №250124-031-0962","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-84.67","RUB","-84.67","Еда","Продукты","Напитки","Лимонад из Яндекс.Лавки" +"2025-01-06","2025-01-08","Хлеб Самокат тартин, пшенично-ржаной, половинка, нарезка, 300 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2209.0","RUB","-67.0","Еда","Продукты","Хлеб","Покупка хлеба в Самокате" +"2025-01-06","2025-01-08","Подсолнечное масло Самокат, рафинированное, 800 мл","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2209.0","RUB","-139.0","Еда","Продукты","Масло","Покупка подсолнечного масла в Самокате" +"2025-01-19","2025-01-21","Черри Эко-культура круглые красные","Заказ из Яндекс.Лавки №250119-020-3606","","","by Zalina","YANDEX.LAVKA","Moskva , RU ","raiffeisen+receipts","-289.0","RUB","-289.0","Еда","Продукты","Овощи","Покупка черри в Яндекс.Лавке" +"2025-01-24","2025-01-27","Кето сырники Азбука Life Pro","Заказ в Яндекс.Еде №20250124-1228","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts+paired","-268.0","RUB","-268.0","Еда","Готовая","Рестораны","Кето сырники Азбука Life Pro" +"2025-01-24","2025-01-27","Перец болгарский желтый (1.08)","Заказ в Яндекс.Еде №20250124-1228","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts+paired","-133.92","RUB","-133.92","Еда","Продукты","Овощи","Покупка перца в Азбуке Вкуса" +"2025-01-24","2025-01-24","Пакет-майка Дикси 43х68см 20кг","Заказ в Яндекс.Еде №20250125-0016","","","by Anton","Дикси","","yandex+receipts+refunded","-24.0","RUB","-24.0","Еда","Продукты","Упаковка","Пакет-майка в Дикси (Яндекс.Еда)" +"2025-01-08","2025-01-10","Медовик Petit Caf , 115 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-1206.0","RUB","-199.0","Еда","Продукты","Десерты и сладости","Покупка медовика в Самокате" +"2025-01-06","2025-01-08","Баклажан, 1 шт.","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2209.0","RUB","-169.0","Еда","Продукты","Овощи","Покупка баклажана в Самокате" +"2025-01-06","2025-01-08","Мандарины, отборные, 600 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2209.0","RUB","-189.0","Еда","Продукты","Фрукты","Покупка мандаринов в Самокате" +"2025-01-06","2025-01-08","Огурцы, короткоплодные, колючие, 450 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2209.0","RUB","-279.0","Еда","Продукты","Овощи","Огурцы в Самокате" +"2025-01-15","2025-01-17","Авокадо хасс Артфрут, 2 шт.","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2150.0","RUB","-379.0","Еда","Продукты","Овощи","Покупка авокадо в Самокате" +"2025-01-31","2025-01-31","Голубика, 125 г","Заказ в Яндекс.Еде №20250131-2352","","","by Anton","Азбука вкуса","","yandex+receipts+paired","-322.0","RUB","-322.0","Еда","Продукты","Фрукты","Покупка голубики в Азбуке Вкуса" +"2025-01-31","2025-01-31","Сок Rich Апельсин 1л","Заказ в Яндекс.Еде №20250131-2352","","","by Anton","Азбука вкуса","","yandex+receipts+paired","-233.0","RUB","-233.0","Еда","Продукты","Напитки","Покупка сока Rich в Азбуке Вкуса" +"2025-01-24","2025-01-24","Сервисный сбор","Заказ в Яндекс.Еде №20250125-0016","","","by Anton","YANDEX.EDA","","yandex+receipts+refunded","-90.0","RUB","-90.0","Логистика","Доставка","Сервисный сбор","Сервисный сбор за доставку Яндекс.Еды" +"2025-01-06","2025-01-08","Филе бедра цыплёнка-бройлера Троекурово, охлаждённое, 750 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2209.0","RUB","-385.0","Еда","Продукты","Птица","Покупка курицы в Самокате" +"2025-01-06","2025-01-08","Кабачки, 500 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2209.0","RUB","-169.0","Еда","Продукты","Овощи","Покупка кабачков в Самокате" +"2025-01-15","2025-01-17","Красные томаты черри Flamenco, круглые, на ветке, 250 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2150.0","RUB","-289.0","Еда","Продукты","Овощи","Покупка томатов черри в Самокате" +"2025-01-20","2025-01-23","Сыр Самокат, Лябан, мягкий, ассорти, 60%, 250 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-1279.0","RUB","-355.0","Еда","Продукты","Молочные продукты","Покупка сыра в Самокате" +"2025-01-24","2025-01-24","Нектар Rich Вишня 1л","Заказ в Яндекс.Еде №20250125-0016","","","by Anton","Дикси","","yandex+receipts+refunded","-528.0","RUB","-528.0","Еда","Продукты","Напитки","Покупка нектара Rich в Яндекс.Еде" +"2025-01-02","2025-01-04","Жёлтый перец, 500 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-1365.0","RUB","-299.0","Еда","Продукты","Овощи","Покупка жёлтого перца в Самокате" +"2025-01-24","2025-01-27","Пудинг миндальный с вишней, Уже Готово","Заказ в Яндекс.Еде №20250124-1228","","","by Zalina","Азбука вкуса","Moskva , RU ","raiffeisen+receipts+paired","-397.0","RUB","-397.0","Еда","Готовая","Рестораны","Пудинг в Яндекс.Еде из Азбуки Вкуса" +"2025-01-15","2025-01-17","Яблоки Роял гала, 500 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2150.0","RUB","-129.0","Еда","Продукты","Фрукты","Покупка яблок в Самокате" +"2025-01-20","2025-01-23","Хлеб Самокат тартин, пшенично-ржаной, половинка, нарезка, 300 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-1279.0","RUB","-79.0","Еда","Продукты","Хлеб","Покупка хлеба в Самокате" +"2025-03-19","","Mobile payment","Anton's Ru AppStore order","","","Anton (antonme@mac.com)","Beeline","","tbank+receipts","-900","RUB","-900","Технологии","Мобильная связь","Билайн","Оплата мобильной связи Beeline" +"2025-01-06","2025-01-08","The Black Swan: Second Edition: The Impact of the Highly Improbable (Incerto Book 2) by Nassim Nicholas Taleb [Kindle Edition]","Amazon Digital Order #D01-0985373-7065800","","*6076","","Random House LLC","USA, 888-802-3080","freedom","-13.99","USD","-1473.71","Развлечения","Чтение","Электронные книги","Покупка электронной книги The Black Swan" +"2025-01-06","2025-01-08","Красные томаты черри Flamenco, круглые, на ветке, 250 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2209.0","RUB","-289.0","Еда","Продукты","Овощи","Покупка томатов черри в Самокате" +"2025-01-15","2025-01-17","Огурец Луховицкие овощи, длинноплодный, гладкий, 1 шт.","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2150.0","RUB","-149.0","Еда","Продукты","Овощи","Покупка огурца в Самокате" +"2025-01-02","","Halide Mark II - Pro Camera - Subscription (Yearly)","Anton's RU AppStore order","","","Anton (antonme@mac.com)","Halide Mark II","","tbank+receipts","-799.0","RUB","-799.0","Развлечения","Хобби Антона","Фотография","Halide Mark II subscription for Anton" +"2025-01-06","2025-01-08","Томаты, дагестанские, 500-600 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2209.0","RUB","-199.0","Еда","Продукты","Овощи","Покупка томатов в Самокате" +"2025-01-06","2025-01-08","The Bed of Procrustes: Philosophical and Practical Aphorisms (Incerto Book 4) by Nassim Nicholas Taleb [Kindle Edition]","Amazon Digital Order #D01-0985373-7065800","","*6076","","Random House LLC","USA, 888-802-3080","freedom","-4.99","USD","-525.65","Развлечения","Чтение","Электронные книги","Покупка электронной книги The Bed of Procrustes" +"2025-01-06","2025-01-08","Лавровый лист Самокат, 8 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2209.0","RUB","-85.0","Еда","Продукты","Специи","Покупка лаврового листа в Самокате" +"2025-01-09","","Who Calls: Caller ID - Subscription (Yearly)","Anton's RU AppStore order","","","Anton (antonme@mac.com)","Who Calls: Caller ID","","tbank+receipts","-1190.0","RUB","-1190.0","Развлечения","Подписки","Всё-в-одном","Who Calls Caller ID Subscription" +"2025-01-20","2025-01-23","Коин Самокат, с мандарином и шоколадным ганашом, 114 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-1279.0","RUB","-249.0","Еда","Продукты","Десерты и сладости","Коин Самокат десерт" +"2025-03-19","","Mobile payment","Zalina's RU AppStore order","","","Zalina (zalinka@yandex.ru)","MTS","","tbank+receipts","-820","RUB","-820","Технологии","Мобильная связь","МТС","Оплата мобильной связи МТС" +"2025-01-08","2025-01-10","Торт Зальцбургский шоколад У Палыча, с ягодами, 500 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-1206.0","RUB","-799.0","Еда","Продукты","Десерты и сладости","Покупка торта в Самокате" +"2025-01-05","","Premier (Automatic Renewal) - Subscription (Monthly)","Zalina's RU AppStore order","","","Zalina (zalinka@yandex.ru)","Premier","","tbank+receipts","-995.0","RUB","-995.0","Развлечения","Подписки","Всё-в-одном","Apple Premier Subscription" +"2025-03-19","","Mobile payment","Anton's Ru AppStore order","","","Anton (antonme@mac.com)","MTS","","tbank+receipts","-850","RUB","-850","Технологии","Мобильная связь","МТС","Оплата мобильной связи МТС" +"2025-01-15","2025-01-17","Кекс Коломенский Мастер Пироговъ, с изюмом, 400 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2150.0","RUB","-208.0","Еда","Продукты","Десерты и сладости","Покупка кекса в Самокате" +"2025-01-15","2025-01-17","Голень цыплёнка-бройлера Троекурово, 900 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2150.0","RUB","-325.0","Еда","Продукты","Птица","Покупка голени цыплёнка в Самокате" +"2025-01-15","2025-01-17","Голень цыплёнка-бройлера Троекурово, 900 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2150.0","RUB","-325.0","Еда","Продукты","Птица","Покупка голени цыплёнка в Самокате" +"2025-01-02","2025-01-04","Стейк Индилайт, из грудки индейки, 525 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-1365.0","RUB","-399.0","Еда","Продукты","Птица","Покупка стейка из индейки в Самокате" +"2025-01-05","","Paper — Writing App + Notes - Subscription (Monthly)","Anton's RU AppStore order","","","Anton (antonme@mac.com)","Paper — Writing App + Notes","","tbank+receipts","-199.0","RUB","-199.0","Развлечения","Хобби Антона","","Paper App Subscription for Anton" +"2025-01-15","2025-01-17","Яблоки Голден, 500 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2150.0","RUB","-129.0","Еда","Продукты","Фрукты","Покупка яблок в Самокате" +"2025-01-02","2025-01-04","Джемы для сыра Самокат, абрикос с ароматом чёрного перца и манго с кардамоном и куркумой, 100 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-1365.0","RUB","-219.0","Еда","Продукты","Варенье","Покупка джемов в Самокате" +"2025-01-15","2025-01-17","Хлеб Самокат тартин, пшенично-ржаной, половинка, нарезка, 300 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2150.0","RUB","-68.0","Еда","Продукты","Хлеб","Покупка хлеба в Самокате" +"2025-01-20","2025-01-23","Слойка-ролл Самокат, с корицей и сливочно-сырным кремом, 100 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-1279.0","RUB","-239.0","Еда","Продукты","Десерты и сладости","Слойка-ролл from Самокат" +"2025-01-27","","Termius: Terminal & SSH client - Subscription (Monthly)","Anton's RU AppStore order","","","Anton (antonme@mac.com)","Termius: Terminal & SSH client","","tbank+receipts","-300.0","RUB","-300.0","Технологии","Инфраструктура домашнего интернета","Сервисы","Termius subscription for server access" +"2025-01-28","","Gmail - Email by Google - Subscription (Monthly)","Zalina's RU AppStore order","","","Zalina (zalinka@yandex.ru)","Gmail","","tbank+receipts","-169.0","RUB","-169.0","Развлечения","Подписки","Всё-в-одном","Apple Premier Subscription" +"2025-01-06","2025-01-08","Коин Самокат x Слой, черника и лаванда, 110 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2209.0","RUB","-239.0","Еда","Продукты","Десерты и сладости","Покупка черники и лаванды в Самокате" +"2025-01-20","2025-01-23","Творожный сыр Самокат, с авокадо, базиликом, тимьяном и кинзой, 130 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-1279.0","RUB","-149.0","Еда","Продукты","Молочные продукты","Покупка творожного сыра в Самокате" +"2025-01-15","2025-01-17","Салат айсберг Белая дача, 140 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-2150.0","RUB","-149.0","Еда","Продукты","Овощи","Покупка салата айсберг в Самокате" +"2025-01-02","2025-01-04","Красные томаты черри Flamenco, круглые, на ветке, 250 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-1365.0","RUB","-279.0","Еда","Продукты","Овощи","Покупка томатов черри в Самокате" +"2025-01-02","2025-01-04","Шпинат, 75 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-1365.0","RUB","-169.0","Еда","Продукты","Овощи","Покупка шпината в Самокате" +"2025-01-20","2025-01-23","Кекс Коломенский Мастер Пироговъ, с изюмом, 400 г","","","","","SAMOKAT.RU","SANKT-PETERBU, RU ","raiffeisen+receipts","-1279.0","RUB","-208.0","Еда","Продукты","Десерты и сладости","Покупка кекса в Самокате" +"2025-01-22","","Duolingo - Language Lessons - Subscription (Monthly)","Zalina's RU AppStore order","","","Zalina (zalinka@yandex.ru)","Duolingo","","tbank+receipts","-599.0","RUB","-599.0","Развлечения","Подписки","Языковые курсы","Duolingo subscription for language learning" +"2025-01-28","","Craft: Write docs, AI editing - Subscription (Monthly)","Anton's RU AppStore order","","","Anton (antonme@mac.com)","Craft: Write docs, AI editing","","tbank+receipts","-899.0","RUB","-899.0","Развлечения","Хобби Антона","Craft","Craft subscription for Anton's hobby" +"2025-01-20","","Либо/Либо+ (Automatic Renewal) - Subscription (Monthly)","Zalina's RU AppStore order","","","Zalina (zalinka@yandex.ru)","Либо/Либо+","","tbank+receipts","-249.0","RUB","-249.0","Развлечения","Подписки","Новости и тексты","Подписка на Либо/Либо+ подкасты" +"2025-01-01","","Все будет норм (Automatic Renewal) - Subscription (Monthly)","Zalina's RU AppStore order","","","Zalina (zalinka@yandex.ru)","Все будет норм","","tbank+receipts","-349.0","RUB","-349.0","Развлечения","Подписки","Всё-в-одном","Zalina's AppStore subscription renewal" +"2025-01-08","","Premier (Automatic Renewal) - Subscription (Monthly)","Anton's RU AppStore order","","","Anton (antonme@mac.com)","Premier","","tbank+receipts","-995.0","RUB","-995.0","Развлечения","Подписки","Всё-в-одном","Apple Premier subscription" +"2025-01-24","","Telegram Messenger - Subscription (Monthly)","Zalina's RU AppStore order","","","Zalina (zalinka@yandex.ru)","Telegram Messenger","","tbank+receipts","-329.0","RUB","-329.0","Развлечения","Подписки","Мессенджеры","Подписка на Telegram Messenger" +"2025-01-11","","Ornament: Health Monitoring - Subscription (Yearly)","Zalina's RU AppStore order","","","Zalina (zalinka@yandex.ru)","Ornament: Health Monitoring","","tbank+receipts","-1290.0","RUB","-1290.0","Здоровье","Подписки","Health Monitoring","Health Monitoring Subscription" +"2025-01-10","","Bear - Markdown Notes - Subscription (Monthly)","Zalina's RU AppStore order","","","Zalina (zalinka@yandex.ru)","Bear","","tbank+receipts","-99.0","RUB","-99.0","Развлечения","Подписки","Приложения","Bear Markdown Notes monthly subscription" diff --git a/app.js b/app.js new file mode 100644 index 0000000..9318d89 --- /dev/null +++ b/app.js @@ -0,0 +1,546 @@ +// Initialize the chart +const chartDom = document.getElementById('chart-container'); +const myChart = echarts.init(chartDom); +let option; + +// Function to parse CSV data +async function parseCSV(file) { + const response = await fetch(file); + const data = await response.text(); + + // Split the CSV into rows + const rows = data.split('\n'); + + // Extract headers and remove quotes + const headers = rows[0].split(',').map(header => header.replace(/"/g, '')); + + // Parse the data rows + const result = []; + for (let i = 1; i < rows.length; i++) { + if (!rows[i].trim()) continue; + + // Handle commas within quoted fields + const row = []; + let inQuote = false; + let currentValue = ''; + + for (let j = 0; j < rows[i].length; j++) { + const char = rows[i][j]; + + if (char === '"') { + inQuote = !inQuote; + } else if (char === ',' && !inQuote) { + row.push(currentValue.replace(/"/g, '')); + currentValue = ''; + } else { + currentValue += char; + } + } + + // Push the last value + row.push(currentValue.replace(/"/g, '')); + + // Create an object from headers and row values + const obj = {}; + for (let j = 0; j < headers.length; j++) { + obj[headers[j]] = row[j]; + } + + result.push(obj); + } + + return result; +} + +// Function to transform data into a sunburst format +function transformToSunburst(data) { + // Calculate total spending + let totalSpending = 0; + + // Group by categories + const categories = []; + const categoryMap = {}; + + // Predefined colors for categories + const colors = [ + '#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', + '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc', '#4cae72', + '#d56358', '#82b1ff', '#f19143', '#addf84', '#6f7787' + ]; + + data.forEach(item => { + const category = item.category || ''; + const subcategory = item.subcategory || ''; + const microcategory = item.microcategory || ''; + const amount = Math.abs(parseFloat(item.amount_rub)); + + if (!isNaN(amount)) { + totalSpending += amount; + + if (!categoryMap[category] && category !== '') { + categoryMap[category] = { + name: category, + value: 0, + children: {}, + itemStyle: {} + }; + categories.push(categoryMap[category]); + } + + if (category !== '') { + if (!categoryMap[category].children[subcategory] && subcategory !== '') { + categoryMap[category].children[subcategory] = { + name: subcategory, + value: 0, + children: {}, + itemStyle: {} + }; + } + + if (subcategory !== '') { + if (!categoryMap[category].children[subcategory].children[microcategory] && microcategory !== '') { + categoryMap[category].children[subcategory].children[microcategory] = { + name: microcategory, + value: 0, + itemStyle: {} + }; + } + + categoryMap[category].value += amount; + categoryMap[category].children[subcategory].value += amount; + + if (microcategory !== '') { + categoryMap[category].children[subcategory].children[microcategory].value += amount; + } + } else { + categoryMap[category].value += amount; + } + } + } + }); + + // Convert the map to an array structure for ECharts + const result = []; + + // Assign colors to categories + categories.forEach((category, index) => { + const colorIndex = index % colors.length; + const categoryNode = { + name: category.name, + value: category.value, + children: [], + itemStyle: { + color: colors[colorIndex] + } + }; + + const subcategories = []; + for (const subcatKey in category.children) { + subcategories.push(category.children[subcatKey]); + } + + subcategories.forEach(subcategory => { + const subcategoryNode = { + name: subcategory.name, + value: subcategory.value, + children: [], + itemStyle: { + color: colors[colorIndex] + } + }; + + const microcategories = []; + for (const microKey in subcategory.children) { + microcategories.push(subcategory.children[microKey]); + } + + microcategories.forEach(micro => { + subcategoryNode.children.push({ + name: micro.name, + value: micro.value, + itemStyle: { + color: colors[colorIndex] + } + }); + }); + + if (subcategoryNode.children.length > 0) { + categoryNode.children.push(subcategoryNode); + } else { + categoryNode.children.push({ + name: subcategory.name, + value: subcategory.value, + itemStyle: { + color: colors[colorIndex] + } + }); + } + }); + + result.push(categoryNode); + }); + + return { + total: totalSpending, + data: result + }; +} + +// Function to render the chart +function renderChart(data) { + const sunburstData = transformToSunburst(data); + + option = { + backgroundColor: '#fff', + grid: { + left: '10%', // Move chart to the left + containLabel: true + }, + series: { + type: 'sunburst', + radius: [0, '95%'], + center: ['40%', '50%'], // Move chart to the left + nodeClick: 'rootToNode', // To enable drill down on click + data: sunburstData.data, + label: { + show: true, + formatter: function(param) { + if (param.depth === 0) { + // Add line breaks for long category names + if (param.name.length > 10) { + return param.name.replace(/(.{1,10})(?: |$)/g, "$1\n").trim(); + } + return param.name; + } else { + return ''; + } + }, + minAngle: 5, + align: 'center', + verticalAlign: 'middle', + position: 'inside' + }, + itemStyle: { + borderWidth: 1, + borderColor: '#fff' + }, + levels: [ + {}, + { + // First level - Categories + r0: '20%', + r: '45%', + label: { + show: true, + rotate: 'radial', + fontSize: 12, + lineHeight: 15, + verticalAlign: 'center', + position: 'inside', + }, + itemStyle: { + borderWidth: 2 + } + + }, + { + // Second level - Subcategories + r0: '45%', + r: '70%', + label: { + show: false, + fontSize: 11, + align: 'left', + position: 'inside', + distance: 5, + + }, + itemStyle: { + borderWidth: 1 + }, + emphasis: { + label: { + show: true, + distance: 20, + } + } + }, + { + // Third level - Microcategories - a bit wider than before + r0: '70%', + r: '75%', + label: { + show: false, + position: 'outside', + padding: 3, + silent: false, + fontSize: 10, + formatter: function(param) { + if (param.name.length > 10) { + return param.name.slice(0, 8) + '...'; + } + return param.name; + } + }, + itemStyle: { + borderWidth: 3 + } + } + ], + emphasis: { + focus: 'relative', + }, + // Add more space between wedges + gap: 2, + // Allow the chart to sort segments by value + sort: null, + tooltip: { + trigger: 'item', + formatter: function(info) { + const value = info.value.toLocaleString(); + const name = info.name; + + // Calculate percentage of total + const percentage = ((info.value / sunburstData.total) * 100).toFixed(1); + + return `${name}
Amount: ${value} RUB
Percentage: ${percentage}%`; + } + } + }, + graphic: [ + { + type: 'text', + left: '37%', // Align with new center position + top: '49%', + style: { + text: sunburstData.total.toFixed(0).toLocaleString()+" ₽", + fontWeight: 'bold', + fontSize: 18, + textAlign: 'center', + textVerticalAlign: 'middle', + position: 'center', + width: 20, + height: 40 + }, + z: 100 // Ensure it's on top + } + + ] + }; + + // Handle chart events - recolor on drill down + myChart.off('click'); + myChart.on('click', function(params) { + if (params.depth >= 0) { // Handle clicks on any level, not just depth 0 + const colorPalette = [ + '#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', + '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc', '#4cae72' + ]; + + // Clone the data to modify it + const currentData = JSON.parse(JSON.stringify(option.series.data)); + + // Find the path to the clicked item + let targetData; + let categoryIndex = -1; + + if (params.depth === 0) { + // If clicking on a top-level category + categoryIndex = currentData.findIndex(item => item.name === params.name); + if (categoryIndex !== -1) { + targetData = currentData[categoryIndex]; + } + } else if (params.depth === 1) { + // If clicking on a subcategory, find its parent category first + for (let i = 0; i < currentData.length; i++) { + if (currentData[i].children) { + const subIndex = currentData[i].children.findIndex(sub => sub.name === params.name); + if (subIndex !== -1) { + targetData = currentData[i].children[subIndex]; + categoryIndex = i; + break; + } + } + } + } + + if (targetData && targetData.children && targetData.children.length > 0) { + // Recolor children with unique colors + targetData.children.forEach((child, i) => { + const color = colorPalette[i % colorPalette.length]; + child.itemStyle = { + color: color + }; + + // If the child has children (microcategories), color them too + if (child.children && child.children.length > 0) { + const microColors = generateColorGradient(color, child.children.length); + child.children.forEach((micro, j) => { + micro.itemStyle = { + color: microColors[j] + }; + }); + } + }); + + // Update the chart with modified data + if (params.depth === 0) { + currentData[categoryIndex] = targetData; + } else if (params.depth === 1) { + // Update the subcategory within its parent category + for (let i = 0; i < currentData[categoryIndex].children.length; i++) { + if (currentData[categoryIndex].children[i].name === params.name) { + currentData[categoryIndex].children[i] = targetData; + break; + } + } + } + + option.series.data = currentData; + myChart.setOption(option, { replaceMerge: ['series'] }); + } + } + }); + + myChart.setOption(option); + + // Set up hover events for the details box + setupHoverEvents(); +} + +// Function to generate a color gradient +function generateColorGradient(baseColor, steps) { + const result = []; + const base = tinycolor(baseColor); + + // Generate lighter shades for better contrast + for (let i = 0; i < steps; i++) { + // Create various tints and shades based on the position + let color; + if (i % 3 === 0) { + color = base.clone().lighten(15); + } else if (i % 3 === 1) { + color = base.clone().darken(10); + } else { + color = base.clone().saturate(20); + } + result.push(color.toString()); + } + + return result; +} + +// Load TinyColor library for color manipulation +function loadTinyColor() { + return new Promise((resolve, reject) => { + if (window.tinycolor) { + resolve(); + return; + } + + const script = document.createElement('script'); + script.src = 'https://cdnjs.cloudflare.com/ajax/libs/tinycolor/1.4.2/tinycolor.min.js'; + script.onload = resolve; + script.onerror = reject; + document.head.appendChild(script); + }); +} + +// Load all available month files +async function loadAvailableMonths() { + // Load TinyColor first + await loadTinyColor(); + + // For now, we only have one month + const months = ['2025-01']; + const select = document.getElementById('month-select'); + + months.forEach(month => { + const option = document.createElement('option'); + option.value = month; + option.textContent = month; + select.appendChild(option); + }); + + // Load the first month by default + const data = await parseCSV(`altcats-${months[0]}.csv`); + renderChart(data); + + // Add event listener for month selection + select.addEventListener('change', async (e) => { + const month = e.target.value; + const data = await parseCSV(`altcats-${month}.csv`); + renderChart(data); + }); +} + +// Initialize the visualization +loadAvailableMonths(); + +// Handle window resize +window.addEventListener('resize', function() { + myChart.resize(); +}); + +// Add mouseover handler to update details box +function setupHoverEvents() { + const hoverNameElement = document.getElementById('hover-name'); + const hoverAmountElement = document.getElementById('hover-amount'); + const topItemsElement = document.getElementById('top-items'); + + // Add mouseover event listener + myChart.on('mouseover', function(params) { + // Only process data nodes, not empty areas + if (params.data) { + // Set the name and amount + hoverNameElement.textContent = params.name; + hoverAmountElement.textContent = params.value.toLocaleString() + ' RUB'; + + // Clear previous top items + topItemsElement.innerHTML = ''; + + // Find top items if there are children + if (params.data.children && params.data.children.length > 0) { + // Sort children by value + const sortedChildren = [...params.data.children].sort((a, b) => b.value - a.value); + + // Display top 10 or fewer + const topChildren = sortedChildren.slice(0, 10); + + // Create elements for each top item + topChildren.forEach(child => { + const itemDiv = document.createElement('div'); + itemDiv.className = 'top-item'; + + const nameSpan = document.createElement('span'); + nameSpan.className = 'top-item-name'; + nameSpan.textContent = child.name; + itemDiv.appendChild(nameSpan); + + const amountSpan = document.createElement('span'); + amountSpan.className = 'top-item-amount'; + amountSpan.textContent = child.value.toLocaleString() + ' ₽'; + itemDiv.appendChild(amountSpan); + + // Add percentage + const percentage = ((child.value / params.value) * 100).toFixed(1); + amountSpan.textContent += ` (${percentage}%)`; + + topItemsElement.appendChild(itemDiv); + }); + } else { + // No children, show a message + topItemsElement.innerHTML = '
No subcategories available
'; + } + } + }); + + // Reset on mouseout from the chart + myChart.on('mouseout', function(params) { + if (!params.data) { + hoverNameElement.textContent = 'Hover over a segment to see details'; + hoverAmountElement.textContent = ''; + topItemsElement.innerHTML = ''; + } + }); +} \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..b216c06 --- /dev/null +++ b/index.html @@ -0,0 +1,33 @@ + + + + + + Spending Visualization + + + + + +
+
+

Family Spending Visualization

+
+ + +
+
+
+
+
+

Details

+
Hover over a segment to see details
+
+

Top Items:

+
+
+
+
+ + + \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..432a280 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "visual-spending", + "version": "1.0.0", + "description": "Visualization for family spending data", + "main": "server.js", + "scripts": { + "start": "node server.js", + "dev": "node server.js" + }, + "keywords": [ + "visualization", + "spending", + "echarts", + "sunburst" + ], + "author": "", + "license": "MIT" +} \ No newline at end of file diff --git a/server.js b/server.js new file mode 100644 index 0000000..e5ee288 --- /dev/null +++ b/server.js @@ -0,0 +1,45 @@ +const http = require('http'); +const fs = require('fs'); +const path = require('path'); + +const PORT = 3000; + +const MIME_TYPES = { + '.html': 'text/html', + '.css': 'text/css', + '.js': 'text/javascript', + '.json': 'application/json', + '.csv': 'text/csv', +}; + +const server = http.createServer((req, res) => { + // Handle URL + let filePath = '.' + req.url; + if (filePath === './') { + filePath = './index.html'; + } + + const extname = path.extname(filePath); + const contentType = MIME_TYPES[extname] || 'application/octet-stream'; + + fs.readFile(filePath, (err, data) => { + if (err) { + if (err.code === 'ENOENT') { + res.writeHead(404); + res.end('File not found'); + } else { + res.writeHead(500); + res.end('Server error: ' + err.code); + } + return; + } + + res.writeHead(200, { 'Content-Type': contentType }); + res.end(data); + }); +}); + +server.listen(PORT, () => { + console.log(`Server running at http://localhost:${PORT}/`); + console.log(`Visualizing spending data with ECharts...`); +}); \ No newline at end of file diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..38b4236 --- /dev/null +++ b/styles.css @@ -0,0 +1,120 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: Arial, sans-serif; + background-color: #f5f5f5; + color: #333; +} + +.container { + max-width: 1200px; + margin: 0 auto; + padding: 20px; +} + +.header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20px; +} + +.month-selector { + display: flex; + align-items: center; + gap: 10px; +} + +#month-select { + padding: 8px; + border-radius: 4px; + border: 1px solid #ddd; +} + +.content-wrapper { + display: flex; + position: relative; +} + +#chart-container { + width: 100%; + height: 80vh; + background-color: white; + border-radius: 8px; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); +} + +#details-box { + position: absolute; + top: 10px; + right: 20px; + width: 280px; + background-color: white; + border-radius: 8px; + box-shadow: 0 2px 15px rgba(0, 0, 0, 0.15); + padding: 15px; + z-index: 10; + min-height: 200px; + max-height: 500px; + overflow-y: auto; + opacity: 0.95; + border: 1px solid #eee; +} + +#details-box h3 { + margin-bottom: 10px; + color: #444; + font-size: 16px; + border-bottom: 1px solid #eee; + padding-bottom: 5px; +} + +#details-box h4 { + margin: 10px 0 5px; + color: #555; + font-size: 14px; +} + +#hover-name { + font-weight: bold; + margin-bottom: 5px; + color: #333; + word-break: break-word; +} + +#hover-amount { + font-size: 18px; + margin-bottom: 10px; + color: #0066cc; +} + +#top-items { + font-size: 13px; +} + +.top-item { + display: flex; + justify-content: space-between; + padding: 4px 0; + border-bottom: 1px dashed #eee; +} + +.top-item:last-child { + border-bottom: none; +} + +.top-item-name { + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.top-item-amount { + margin-left: 10px; + font-weight: bold; +} \ No newline at end of file