مستندات فرمولهای محاسبه
توضیح کامل روش محاسبه قیمت و مدل جعبه دارویی بسته (پشت، رو، چپ، راست، ته، درب) در ماشینحساب و API
۱. ورودیها و پارامترهای قابل تنظیم
مشتری در ماشینحساب ابتدا از منوی دکمهای دستهبندی و سپس محصول (نوع جعبه) انتخاب میکند؛ سپس ابعاد، تیراژ و مواد را تکمیل میکند:
| ورودی | نماد | واحد |
|---|---|---|
| دستهبندی | boxCategoryId | انتخاب از منو |
| نوع جعبه / محصول | boxTypeId | انتخاب از لیست همان دسته |
| طول جعبه | L | سانتیمتر |
| عرض جعبه | W | سانتیمتر |
| ارتفاع جعبه | H | سانتیمتر |
| تعداد سفارش | Q | عدد |
| نوع کاغذ | — | انتخاب از لیست |
| روکش UV | hasUV | بله / خیر |
| طلاکوب | hasGold | بله / خیر |
از هر کاغذ: ابعاد ورق (sheetLength، sheetWidth)، گرماژ، قیمت بند (bundle). از پنل: چاپ، دایکات، UV، طلاکوب، سود، مالیات، چسباندن، طراحی و بستهبندی.
۲. کاتالوگ دستهبندی و محصول
محصولات در پنل مدیر در دو سطح مدیریت میشوند:
- دستهها (
box_categories): کیبوردی، لمینتی، کشویی، دستهدار، سروته شربتی، سفرهای، درب و زیره، خاص — باsort_orderبرای ترتیب نمایش (کیبوردی اول، خاص آخر). - انواع جعبه (
box_types): هر محصول به یک دسته وصل است؛ میتواندuses_custom_dimensionsداشته باشد یا سایز ثابت (length_cm,width_cm,height_cm). - تصویر محصول (
image_path): در ماشینحساب بلافاصله زیر دستهها و بالای انتخاب محصول نمایش داده میشود (در موبایل تصویر قبل از فیلد select قرار میگیرد تا نیاز به اسکرول طولانی نباشد).
پیشفرض ماشینحساب: اولین دسته بر اساس sort_order (معمولاً کیبوردی) انتخاب میشود، نه اولین دستهای که محصول دارد.
php artisan storage:link اجرا شود.۳. نوع جعبه و اجزای آن
مدل جعبه شبیه جعبه دارو است:
- پشت ↔ رو — دو وجه مقابل L×W (پشت در وسط دایکات، رو در بالا).
- ته ↔ درب — ته چسبخورده W×H (پایین دایکات)؛ درب جلو + لبهتا (بازشدنی).
- چپ و راست — دو پهلو H×L.
۴. ابعاد گسترده (الگوی تخت — ایفلوت و مقوایی)
برای هر دو نوع جعبه یک فرمول واحد است. marginCm، pattern (tuck_end، rsc، mailer و …) و ابعاد شیت SVG در محاسبه گسترده استفاده نمیشوند.
۰٫۵ اول = عطف لب برگردان، ۰٫۵ دوم = پرتی برش. ایفلوت: چیدمان رول با EfluteRollLayout::optimize(flatWidth). مقوایی: چیدمان روی ورق ثابت با همان ابعاد.
مثال: L=35.5, W=25, H=4.5 → گسترده 54.5 × 64.0 cm.
انتخاب سایز استاندارد دایکات
پس از محاسبه flatLength و flatWidth، بین سایزهای استاندارد زیر
(DieCutSheetLayout::optimize) شیت با کمترین پرتی انتخاب میشود
(هر سایز در هر دو جهت چرخیده امتحان میشود).
مثال: گسترده 54.5×64 cm → سایز 60×90 با کمترین پرتی.
| سایز دایکات (cm) | ابعاد شیت (طول × عرض) |
|---|---|
| 50×70 | 50 × 70 |
| 100×70 | 100 × 70 |
| 45×60 | 45 × 60 |
| 60×90 | 60 × 90 |
۵. چیدمان روی ورق و تعداد ورق مصرفی
ورق کاغذ ابعاد ثابت دارد (sheetLength × sheetWidth بر حسب سانتیمتر). دو حالت چرخش الگوی گسترده مقایسه میشود:
چیدمان افقی
چیدمان عمودی (چرخش ۹۰° الگو)
انتخاب و تعداد ورق
۶. هزینه کاغذ
هزینه هر ورق از قیمت بند کاغذ و تعداد برگ در بند محاسبه میشود (نه مستقیم از pricePerKg در این مرحله):
در نتیجه محاسبه، بند مصرفی برای سفارش کاغذ از فروشنده نمایش داده میشود (گرد به بالا؛ ممکن است چند ورق بیشتر از مصرف چاپ در بند آخر باشد).
برای نمایش و ثبت کاغذ، pricePerKg از روی وزن تقریبی هر برگ و قیمت بند مشتق میشود؛ ولی در فرمول قیمت نهایی سفارش، مبنای هزینه ورق همان sheetCost بالاست.
مساحت ورق (متر مربع) در هزینه چاپ استفاده میشود.
۷. چاپ افست (دور چاپ + زینک)
هزینه دایکات در بخش ۷-۱ جدا توضیح داده شده است.
هزینه چاپ دیگر بر اساس متر مربع نیست. بر اساس دور چاپ (تعداد ورق قابلصورتحساب، گرد به بالا و مضرب ۱۰۰۰) و پلکانهای تعریفشده در پنل مدیر محاسبه میشود.
اگر تیراژ سفارش (مثلاً ۲۸۰۰ عدد) پلکان بالاتری از ورق مصرفی بخواهد، همان تیراژ مبنای انتخاب پلکان است (مثلاً ۳۰۰۰ دور، نه ۲۰۰۰).
| ورق مصرفی | دور چاپ |
|---|---|
| ۱ تا ۹۹۹ | ۱۰۰۰ |
| ۱۰۰۰ | ۱۰۰۰ |
| ۱۲۰۰ | ۲۰۰۰ |
| ۲۵۰۱ | ۳۰۰۰ |
در پنل هزینه چاپ افست و هزینه زینک برای هر پلکان ۱۰۰۰ تا ۵۰۰۰ دور فقط printCost (هزینه چاپ) وارد میشود.
زینک (یکبار برای سفارش)
هزینه زینک با افزایش دور چاپ ضرب نمیشود؛ همان زینک تا پنج هزار دور (و بیشتر) برای یک سفارش کافی است.
هر سفارش فقط یک زینک دارد؛ مبلغ آن در پنل مدیر یکبار وارد میشود.
طلاکوب بر اساس پلکان تیراژ و سایز طرح است (بخش ۱۱).
۷-۱. دایکات — سایز استاندارد و قیمت
برای هر سایز، هزینهٔ یکبار قالبزنی / دایکات برای کل سفارش است (نه به ازای هر جعبه). سایز از ابعاد گسترده با کمترین پرتی انتخاب میشود (بخش ۴. ابعاد گسترده).
sizeLabel یکی از برچسبهای جدول زیر است (مثلاً 60×90).
ویرایش قیمتها: پنل دایکات
· نمای زنده: داشبورد قیمتها.
سایزهای استاندارد دایکات
برای هر سایز، هزینهٔ یکبار قالبزنی / دایکات برای کل سفارش را در پنل وارد کنید. مثال: گستردهٔ 54.5×64 cm → سایز 60×90 با کمترین پرتی انتخاب میشود.
| سایز دایکات (cm) | هزینه (تومان) | توضیح |
|---|---|---|
| 50×70 | 1,800,000 | یکبار برای کل سفارش |
| 100×70 | 2,500,000 | یکبار برای کل سفارش |
| 45×60 | 1,800,000 | یکبار برای کل سفارش |
| 60×90 | 2,500,000 | یکبار برای کل سفارش |
۸. چسباندن و دستمزد
۹. هزینه طراحی
مشتری ساعت طراحی وارد نمیکند؛ همیشه از حداقل ساعت طراحی تنظیمشده توسط مدیر استفاده میشود.
۱۰. بستهبندی نهایی
۱۱. UV و طلاکوب (اختیاری — مقوایی)
روکش UV
سایز ورق مثل دایکات از گسترده با کمترین پرتی انتخاب میشود (sizeLabel — بخش ۷-۱).
مثل چسباندن: اگر تیراژ کمتر از حداقل باشد، هزینه با همان حداقل محاسبه میشود.
حداقل تیراژ: 1,000 · ویرایش در پنل روکش UV.
| سایز ورق (cm) | هزینه UV هر جعبه (تومان) |
|---|---|
| 50×70 | 5,000 |
| 100×70 | 8,000 |
| 45×60 | 5,000 |
| 60×90 | 8,000 |
طلاکوب
۱۲. جمع، سود و مالیات
۱۳. نمایش در ماشینحساب مشتری
بارگذاری صفحه: HTML ماشینحساب سبک است؛ دادهٔ قیمتها با GET /api/calculator-data (قابل کش ۵ دقیقه) و اسکریپت calculator.js با defer بارگذاری میشوند.
دو رابط: /calculator (ویزارد گامبهگام) و /calculator/single-page (همهٔ ۷ مرحله در یک صفحه با همان منطق محاسبه).
ویزارد گامبهگام (۷ مرحله):
- نوع جعبه — مقوایی یا ایفلوتی (فیلتر دستهها و کاغذها)
- دستهبندی — منوی دکمهای دستههای همان نوع
- نوع سفارش — «محصول آماده (سایز ثابت)» یا «سایز دلخواه»؛ سپس انتخاب محصول همان دسته
- انتخاب محصول — در حالت آماده: محصولات با ابعاد ثبتشده؛ در حالت دلخواه: محصولات با فلگ ابعاد دلخواه (پیشنمایش در گام ۳)
- ابعاد و تیراژ — برای محصول سفارشی: ابعاد داخلی + تیراژ + پیشنمایش؛ برای محصول ثابت: فقط تیراژ (پیشنمایش در گام قبل است)
- پوشش (اختیاری) — روکش UV و طلاکوب
- ورق — انتخاب نوع کاغذ / ورق
- محاسبه و نتیجه — دکمهٔ «محاسبه قیمت»؛ نمایش قیمت هر جعبه (با سود و مالیات) و جزئیات فنی
در هر گام فقط همان بخش نمایش داده میشود؛ دکمههای «مرحله قبل» و «ادامه» (در گام ۶: «محاسبه قیمت») جابهجایی را کنترل میکنند.
در موبایل نوار ثابت پایین: «ادامه» (گام ۱–۵) یا «محاسبه قیمت» (گام ۶).
پس از وارد کردن L، W و H، سه نما بهروز میشوند:
| نما | نوع | کاربرد |
|---|---|---|
| موکاپ برداری (فنی) | SVG ایزومتریک | ابعاد روی لبهها، لبه تا (گوشه گرد فقط لبه آزاد) |
| نمای سهبعدی | مدل CSS | درک حجمی؛ چرخش با ماوس/لمس |
| الگوی گسترده | SVG دایکات | پشت، رو، چپ، راست، ته، لبهتا، پوشال |
فرمولهای بخش ۳ منبع هر سه نما هستند؛ تغییر ابعاد ورودی همه را همزمان بهروز میکند.
۱۴. API محاسبه
درخواست: POST /api/calculate
| فیلد | نوع | توضیح |
|---|---|---|
| boxTypeId | integer | شناسه نوع جعبه (اختیاری؛ در صورت ارسال، الگوی همان نوع اعمال میشود) |
| length | number | طول L (cm) |
| width | number | عرض W (cm) |
| height | number | ارتفاع H (cm) |
| quantity | integer | تعداد Q |
| paperId | integer | شناسه کاغذ فعال |
| hasUV | boolean | روکش UV |
| hasGold | boolean | طلاکوب |
خروجی مهم (در data):
| فیلد | توضیح |
|---|---|
| pricePerBox | قیمت هر جعبه با سود و مالیات (تومان) |
| totalOrderPrice | قیمت کل سفارش |
| flatLength | طول گسترده (cm) |
| flatWidth | عرض گسترده (cm) |
| tuckFlapDepth | عمق لبه تا tuckT (cm) |
| boxesPerSheet | تعداد جعبه روی هر ورق |
| sheetsNeeded | تعداد ورق مصرفی |
| layout | افقی یا عمودی |
| billablePrintImpressions | دور چاپ قابلصورتحساب |
| printTierKey | پلکان انتخابشده (۱۰۰۰ تا ۵۰۰۰) |
| printCost | هزینه چاپ (پلکان دور چاپ) |
| zincPlatePrice / zincCost | هزینه زینک (یکبار برای سفارش) |
| dieCutCost | هزینه دایکات (کل سفارش) |
| assemblyCost | هزینه چسباندن |
| packagingCost | هزینه بستهبندی |
| uvCost / uvUnitCost / uvSizeLabel / uvMinQuantity / uvQuantityForPricing / hasUV | هزینه روکش UV (در صورت انتخاب) |
| goldCost / hasGold | هزینه طلاکوب (در صورت انتخاب) |
| assemblyQuantity | تیراژ مبنای چسباندن |
| packagingQuantity | تیراژ مبنای بستهبندی |
| designBillableHours | ساعت طراحی (همان designMinHours مدیر) |
۱۵. ارتباط با صفحات پنل
| صفحه | پارامترها |
|---|---|
| دستهبندی جعبه | /admin/box-categories — نام، ترتیب نمایش |
| انواع جعبه / محصولات | /admin/box-types — دسته، ابعاد ثابت، تصویر، الگوی ساخت |
| هزینه چاپ افست و هزینه زینک | پلکان چاپ افست (۱۰۰۰–۵۰۰۰ دور)، هزینه زینک (یکبار) |
| دایکات | /admin/die-cut — قیمت هر سایز استاندارد |
| روکش UV | /admin/uv — قیمت یکبار UV به ازای سایز استاندارد |
| طلاکوب | /admin/gold-stamp — پلکان تیراژ × سایز طرح |
| داشبورد قیمتها | /admin/prices-dashboard — نمای زندهٔ همهٔ قیمتها |
| چسباندن | assemblyLaborCost، assemblyMinQuantity |
| طراحی | designHourlyRate، designMinHours |
| بستهبندی | packagingCost، packagingMinQuantity |
| مشخصات شرکت / پیشفاکتور | /admin/company-profile — لوگو، مهر، آدرس، تلفن، حساب، شبا · در ماشینحساب گام ۷: نام و مشخصات مشتری |
| آرشیو پیشفاکتورها | /admin/preinvoices — تاریخ، مشتری، مدل جعبه (مقوایی/ایفلوتی/…)، ابعاد، قیمت · جستجو: GET /api/preinvoices?q= |
| اشتراک پیشفاکتور | POST /api/preinvoices/share → GET /preinvoice/{token} (لینک عمومی برای شبکههای اجتماعی) |
| کاغذها | ابعاد ورق، gsm، bundlePrice، paperPerBundle |
| ماشینحساب / API | اجرای تمام فرمولهای این سند |
منطق محاسبه در مرورگر (ماشینحساب مشتری) و POST /api/calculate یکسان است.