টাইম ট্র্যাকিং থেকে ইনভয়েস অ্যাপ: এন্ট্রিগুলো থেকে ব্র্যান্ডেড PDFs
প্রজেক্ট ঘণ্টা কুড়িয়ে সেগুলোকে ইনভয়েসে রূপান্তর করে ক্লায়েন্টদের পাঠানোর জন্য ব্র্যান্ডেড PDF জেনারেট করে এমন একটি টাইম-টু-ইনভয়েস অ্যাপ তৈরি করুন।

আপনি যা তৈরি করছেন এবং কেন এটা গুরুত্বপূর্ণ
টাইম ট্র্যাকিং থেকে ইনভয়েস অ্যাপ একটি সাধারণ বিশৃঙ্খলা ঠিক করে: ঘণ্টাগুলো ক্যালেন্ডার, চ্যাট এবং নোটে ছড়িয়ে যায়। তারপর ইনভয়েস পাঠানোর দিন আসে এবং কাউকে মাসটা হাতে করে পুনর্গঠন করতে হয়। এখানেই ভুল ঘটে: বিলেবল সময় মিস হয়, ভুল রেট বসে, লাইন ডুপ্লিকেট হয়, বা মোট সমন্বয় মিলেনা।
এই অ্যাপটি ঘন্টাভিত্তিক বিলিং যারা করে তাদের জন্য: ফ্রিল্যান্সাররা, একাধিক মানুষ একই প্রজেক্টে সময় লগ করা এজেন্সি, এবং অভ্যন্তরীণ টিম যারা ক্লায়েন্ট বা ডিপার্টমেন্টে সময় চার্জ করে।
লক্ষ্যটা বাস্তবসম্মত: প্রজেক্ট অনুযায়ী টাইম এন্ট্রি ক্যাপচার করা, এগুলো ইনভয়েস রেকর্ডে রোল-আপ করা, এবং ক্লায়েন্ট পাঠানোর জন্য একটি ব্র্যান্ডেড PDF জেনারেট করা। এই ওয়ার্কফ্লো নির্ভরযোগ্য হলে, ইনভয়েসিং মাসিক তৎপরতা ইত্যাদি বন্ধ হয়।
"সিম্পল ফার্স্ট" মানে সাধারণত:
- টাইম লগ করার একটাই পথ (তারিখ, প্রজেক্ট, ঘণ্টা, নোট)
- একটাই রেট রুল (প্রজেক্ট বা ব্যক্তি অনুযায়ী)
- প্রতিটি পিরিয়ডে এক ইনভয়েস প্রতি ক্লায়েন্ট
- আপনার লোগো এবং ব্যবসার বিবরণসহ এক PDF লেআউট
- স্পষ্ট স্ট্যাটাস (Draft, Sent, Paid)
একটি ছোট দৃশ্যপট: দুই-জনের একটি স্টুডিও "Client A - Website Updates" প্রজেক্টের সময় ট্র্যাক করে। প্রত্যেকে সপ্তাহজুড়ে এন্ট্রি লগ করে। শুক্রবারে আপনি ঐ প্রজেক্ট ও তারিখ পরিসীমার জন্য একটি ইনভয়েস তৈরি করেন, অ্যাপ এন্ট্রিগুলোকে ইনভয়েস লাইনে রূপান্তর করে, এবং PDF কোনো পুনঃটাইপ ছাড়াই পাঠানোর জন্য প্রস্তুত থাকে।
আপনি যদি AppMaster-এর মতো নো-কোড প্ল্যাটফর্ম ব্যবহার করেন, প্রথমে ডেটা ও ওয়ার্কফ্লো সঠিক করুন, তারপর রিসিপ্ট, মাল্টি-কারেন্সি, ডিসকাউন্ট বা অথরাইজেশন মতো এক্সট্রা যোগ করুন। কোর ফ্লো দ্রুত, সঠিক এবং ভাঙা কঠিন হলে এসব পরে যোগ করা সহজ।
অন্তর্ভুক্ত করার মূল ফিচারগুলো (এবং প্রথমে কী বাদ দেবেন)
একটি ছোট প্রথম ভার্সন আপনাকে "পাঠানোর যোগ্য ইনভয়েস" শীঘ্রই পাবার যোগ্য করে তোলে। তিনটে জিনিসে ফোকাস করুন: সময় ক্যাপচার করা, সময়কে স্পষ্ট ইনভয়েস লাইনে পরিণত করা, এবং এমন একটি PDF তৈরি করা যা ক্লায়েন্ট অতিরিক্ত প্রশ্ন ছাড়াই পড়তে পারে।
কিছু মূল রেকর্ড দিয়ে শুরু করুন (পরে নাম বদলাতে পারবেন, কিন্তু স্ট্রাকচার গুরুত্বপূর্ণ): Client, Project, Time Entry, Invoice, এবং Invoice Line।
ইনভয়েস ওয়ার্কফ্লো সাদাসিধে রাখুন — Invoice রেকর্ডে একটি সিংগেল স্ট্যাটাস ফিল্ড। Draft, Sent, এবং Paid বেশিরভাগ টিমের জন্য অনেক সময় পর্যন্ত যথেষ্ট।
আপনার অবশ্যই থাকা অ্যাকশনগুলো সাধারণত সাপ্তাহিক যা ঘটে তার সাথে মিলবে:
- টাইম লগ (ম্যানুয়াল এন্ট্রি সাধারণত দ্রুত তৈরি করা যায় এবং সংশোধন সহজ)
- টাইম অনুমোদন (এটাকে শুধু একটি "Approved" স্ট্যাটাস করলেই পুরোপুরি কাজ চলে)
- অনুমোদিত সময় থেকে ইনভয়েস তৈরি
- PDF এক্সপোর্ট
"ব্র্যান্ডেড" মানে ফ্যান্সি নয়; এটা ধারাবাহিক ও বিশ্বাসযোগ্য: লোগো, ব্যবসার বিবরণ, ইনভয়েস নম্বর ও তারিখ, স্পষ্ট টোটাল এবং পেমেন্ট নির্দেশনা।
প্রথমে কী বাদ দেবেন: ট্যাক্স, ডিসকাউন্ট, মাল্টি-কারেন্সি, এবং অ্যাটাচমেন্ট। এগুলো দরকারি হতে পারে, কিন্তু রাউন্ডিং, জুরিসডিকশন নিয়ম, এক্সচেঞ্জ রেট এবং ফাইল স্টোরেজের মতো এজ-কেস নিয়ে আসে যা প্রথম রিলিজ ধীরে করে।
ডেটা মডেল: প্রয়োজনীয় রেকর্ড এবং গুরুত্বপূর্ণ ফিল্ডগুলো
টাইম ট্র্যাকিং থেকে ইনভয়েস অ্যাপটি তার ডেটা মডেলে জীবন বা মৃত্যু পায়। ছোট ও পূর্বানুমেয় রাখুন כדי টোটাল সব সময় ক্লায়েন্টকে যেটা বলা হয়েছে তার সাথে মিলবে।
একটি মিনিমাল টেবিল সেট সাধারণত এমন দেখায়:
- Client: name, billing email, billing address, default currency, payment terms (যেমন Net 14)
- Project: client_id, project name, default hourly rate (ঐচ্ছিক), active flag
- Time entry: project_id, person (name বা user_id), date, duration (hours), description, rate_at_time, billable (yes/no), invoiced_invoice_id (বিল করার আগে খালি থাকে)
- Invoice: client_id, project_id (ঐচ্ছিক), invoice number, issue date, due date, status, subtotal, tax, total
রেট যেখানে জটিল হয়ে ওঠে। একটা পদ্ধতি বেছে নিন এবং তাতে স্থির থাকুন: প্রজেক্ট-ভিত্তিক রেট, ব্যক্তি-ভিত্তিক রেট, বা নির্দিষ্ট টাস্ক/সার্ভিস রেট।
যদি আপনি প্রজেক্ট বা ব্যক্তির উপর ডিফল্ট রেট সংরক্ষণ করেন, তখন প্রতিটি টাইম এন্ট্রি তৈরি (বা অনুমোদিত) হলে বাস্তব রেট rate_at_time হিসেবে কপি করে রাখুন। এভাবে পরে রেট বদলে গেলেও চমৎকারভাবে পুরনো ইনভয়েসগুলোতে চমক দেখা যাবে না। ইনভয়েসগুলো তখনই সেই সময়কার সত্য প্রতিফলিত করবে।
টাইম এন্ট্রির জন্য আপনি প্রায়ই আলাদা স্ট্যাটাস ছাড়া invoiced_invoice_id খালি না থাকাকে নির্ভরযোগ্য অবস্থান হিসেবে রাখতে পারবেন। ইনভয়েসগুলোর জন্য স্ট্যাটাসগুলো টাইট রাখুন: Draft, Ready, Sent, Paid (আপনি যদি ক্লিন ক্যান্সেল স্টেট চান তবে Void যোগ করুন)।
AppMaster-এ Data Designer PostgreSQL-এ পরিষ্কারভাবে ম্যাপ করে এবং সম্পর্কগুলো স্পষ্ট রাখাটা সহজ করে দেয়, যাতে প্রতিটি ক্ষেত্র বারবার নকল না করতে হয়।
প্রজেক্ট অনুযায়ী টাইম এন্ট্রি ক্যাপচার (সহজ UX)
টাইম ক্যাপচার হল যেখানে অ্যাপটি বা তো সহজ লাগে বা উপেক্ষিত হয়। প্রথম ভার্সনটাকে বোরিং ও দ্রুত রাখুন: এক স্ক্রিন, এক প্রাথমিক অ্যাকশন, এবং যতটা সম্ভব কম পছন্দ।
শুরুতে একটি ক্যাপচার পদ্ধতি বেছে নিন। ম্যানুয়াল এন্ট্রি প্রাথমিকভাবে সবসময় জিততে পারে কারণ এটা সবার জন্য কাজ করে এবং রিভিউ করা সহজ। যদি আপনি টাইমার যোগ করেন, তারপরও মিস হওয়া স্টপের জন্য ম্যানুয়াল এডিটের সুযোগ রাখুন।
বিলিং কোয়ালিটি রক্ষা করা যে ফিল্ডগুলো বাধ্যতামূলক হওয়া উচিত সেগুলো করুন:
- Project (বা client + project)
- Date
- Duration (hours এবং minutes)
- Short description (ক্লায়েন্ট চিনতে পারবে এমন কিছু)
- Person (যদি একাধিক টিমমেট সময় লগ করে)
রাউন্ডিং নিয়ম সময়ে আগে নির্ধারণ করুন কারণ সেগুলো বিশ্বাস ও টোটালে প্রভাব ফেলে। প্রচলিত এক পদ্ধতি হল ৬-মিনিট ইক্রিমেন্ট (0.1 ঘন্টা)। প্রতিটি এন্ট্রিকে রাউন্ড করা কি না নাকি দৈনিক টোটাল রাউন্ড করা হবে তা স্পষ্ট করুন। প্রতিটি এন্ট্রি রাউন্ড করা ব্যাখ্যা ও অডিট সহজ করে।
যদি একাধিক ব্যক্তি বিলিং নিয়ে টাচ করে, একটি লাইটওয়েট অনুমোদন ধাপ যোগ করুন। বাস্তবসম্মত নিয়ম: একবার অনুমোদিত হলে এন্ট্রিগুলো ডিফল্টভাবে এডিট লক করা থাকে। কিছু বদল করতে হলে ম্যানেজার ভূমিকার অধিকার নিয়ে সেটি পুনরায় খোলা এবং কে কেন বদলালো তা রেকর্ড করতে বলুন।
টাইমকে ইনভয়েস লাইনে পরিণত করা (রোল-আপ রুল)
রোল-আপ হল যেখানে কাঁচা লগগুলো এমন ইনভয়েস লাইনে রূপান্তরিত হয় যা ক্লায়েন্ট সহজে বুঝবে। নিয়মগুলো সরল ও পুনরাবৃত্তি যোগ্য রাখুন যাতে প্রতিটি ইনভয়েস আপনি জেনেরেট করেন তাতে বিশ্বাস রাখা যায়।
শুরু করুন একটি একক অ্যাকশনে: একটি ক্লায়েন্ট ও তারিখ পরিসীমা বেছে নিন, তারপর কেবল বিলে না হওয়া টাইম এন্ট্রিগুলো টানুন। ঐ ফিল্টারই গার্ডরেইলের মতো কাজ করে যা ডাবল ইনভয়েসিং আটকায়। যদি কোনো এন্ট্রি ক্লায়েন্ট বা প্রজেক্ট ছাড়াই থাকে, সেটাকে "বিল করার জন্য প্রস্তুত নয়" হিসেবে বিবেচনা করুন এবং রোল-আপে রাখা হবে না যতক্ষণ না ঠিক করা হয়।
কিভাবে এন্ট্রিগুলোকে ইনভয়েস লাইনে গ্রুপ করবেন
গ্রুপিং নির্ধারণ করে কতগুলো লাইন তৈরি হবে এবং ক্লায়েন্টের জন্য রিভিউ কতটা সহজ হবে। একটি ডিফল্ট পছন্দ বেছে নিন, এবং প্রয়োজনে একটি ঐচ্ছিক সুইচ দিন।
সাধারণ গ্রুপিং অপশনগুলো:
- প্রজেক্ট অনুযায়ী
- ব্যক্তি অনুযায়ী (রেট ভিন্ন হলে উপযোগী)
- দিন বা সপ্তাহ অনুযায়ী
- টাস্ক/ক্যাটাগরি অনুযায়ী (Design বনাম Development)
আপনি যা-ই বাছেন, প্রতিটি লাইনে থাকা উচিত: একটি পরিষ্কার লেবেল, মোট ঘণ্টা, রেট, এবং লাইন অ্যামাউন্ট। যদি রেট বদলাতে পারে, প্রতিটি এন্ট্রিতে সংরক্ষিত rate_at_time ব্যবহার করুন (অথবা "effective from" তারিখ সহ একটি রেট টেবিল), বর্তমান একটি একক রেটে বিশ্বাস করবেন না।
বিলে হিসেবে চিহ্নিত করা (পর থেকে সমস্যা তৈরি না করে)
যখন আপনি কোনো এন্ট্রি ইনভয়েসে যোগ করেন, প্রতিটি টাইম এন্ট্রিতে ইনভয়েস আইডি সংরক্ষণ করুন। এতে একটি অডিট ট্রেইল তৈরি হয় এবং একই এন্ট্রি আবার টানার সম্ভাবনা কমে যায়।
সংশোধন ঘটবে। যদি আপনি কোনো লাইন ইনভয়েস থেকে সরান, ইতিহাস মুছবেন না। প্রভাবিত টাইম এন্ট্রিগুলো আনলিংক করুন (invoice ID ক্লিয়ার করুন), টোটাল পুনরা হিসাব করুন, এবং একটি সংক্ষিপ্ত নোট রাখুন যেমন "Removed 2.0h, wrong project."
AppMaster-এ এটা এক সিঙ্গেল বিজনেস প্রসেস হিসেবে ভাল ফিট করে: unbilled এন্ট্রি কুয়েরি করুন, গ্রুপ করুন, ইনভয়েস লাইন তৈরি করুন, তারপর প্রতিটি এন্ট্রিকে ইনভয়েস রেফারেন্স দিয়ে আপডেট করুন।
ইনভয়েস রেকর্ড: টোটাল, নম্বরিং, এবং স্ট্যাটাস
ইনভয়েস রেকর্ড হল কন্টেনার যা আপনি পাঠাতে, ট্র্যাক করতে এবং পরে অডিট করতে পারবেন। কেউ যদি প্রজেক্ট নাম বা ডিফল্ট রেট বদলে দেয় তবুও এটি স্থিতিশীল থাকা উচিত।
একটি বাস্তবসম্মত ইনভয়েস হেডার অন্তর্ভুক্ত করে:
- Invoice number (ইউনিক, মানব-বান্ধব)
- Issue date এবং due date
- Bill-to বিবরণ (ক্লায়েন্ট নাম, বিলিং ঠিকানা, ট্যাক্স আইডি যদি লাগে)
- নোট (পেমেন্ট নির্দেশনা, সংক্ষিপ্ত ধন্যবাদ লাইন)
- Currency (এবং ঐচ্ছিকভাবে একটি সংরক্ষিত এক্সচেঞ্জ রেট যদি আন্তর্জাতিকভাবে বিল করা হয়)
টোটালগুলো পূর্বানুমেয় রাখুন। Subtotal ইনভয়েস লাইনের যোগফল। তারপর ডিসকাউন্ট (নির্দিষ্ট টাকা বা শতাংশ), ট্যাক্স হিসাব (অften ডিসকাউন্ট করা subtotal-এ), এবং চূড়ান্ত টোটাল সংরক্ষণ করুন। ব্যবহৃত ট্যাক্স রেট এবং ডিসকাউন্ট মানগুলো সংরক্ষণ করুন যাতে পরবর্তীতে ইনভয়েস পুনরুত্পাদন করা যায়।
ইনভয়েস নম্বরিং জটিল হওয়ার দরকার নেই। একটি প্যাটার্ন বেছে নিন এবং তাতে টেকসই থাকুন: সিকোয়েন্সিয়াল (000123), প্রতি বছর (2026-00123), বা ক্লায়েন্ট প্রিফিক্স + সিকোয়েন্স (ACME-014)। ধারাবাহিকতা পারফেকশন থেকে বেশি গুরুত্বপূর্ণ।
স্ট্যাটাস যোগাযোগ এবং অভ্যন্তরীণ নিয়ন্ত্রণে ফোকাস রাখবে:
- Draft (এডিটযোগ্য, পাঠানো হয়নি)
- Ready (টোটাল লক করা)
- Sent (ক্লায়েন্টের সাথে শেয়ার করা হয়েছে)
- Paid (পেমেন্ট নিশ্চিত)
- Overdue (ডিউ তারিখ পেরিয়ে গেছে)
- Void (ক্যান্সেল করা, ইতিহাসের জন্য রাখা)
ক্লায়েন্ট পড়ার যোগ্য ব্র্যান্ডেড PDF জেনারেট করা
ভাল ইনভয়েস PDF দুইটি প্রশ্ন দ্রুত উত্তর দেয়: কী বিল করা হচ্ছে, এবং কিভাবে পেমেন্ট করবেন। ইনভয়েস রেকর্ড থেকেই PDF জেনারেট করুন (কাঁচা টাইম এন্ট্রি থেকে নয়) যাতে ডকুমেন্ট সবসময় ইনভয়েস নম্বর, টোটাল এবং স্ট্যাটাসের সাথে মিলে।
বেশিরভাগ ক্লায়েন্ট প্রতিবার একই ব্লকগুলো আশা করে:
- হেডার: আপনার ব্যবসার নাম, ইনভয়েস নম্বর, এবং ইনভয়েস তারিখ
- ক্লায়েন্ট ডিটেইল: কোম্পানি, কন্টাক্ট নাম, বিলিং ঠিকানা, ট্যাক্স আইডি যদি লাগে
- লাইন আইটেম: বর্ণনা, পরিমাণ বা ঘণ্টা, রেট, লাইন টোটাল
- টোটাল: সাবটোটাল, ট্যাক্স, ডিসকাউন্ট, গ্র্যান্ড টোটাল
- পেমেন্ট টার্ম: ডিউ তারিখ, গ্রহণযোগ্য পদ্ধতি, যদি ব্যবহার করেন লেট ফি নোট
ব্র্যান্ডিংই গুরুত্বপূর্ণ, কিন্তু পাঠযোগ্যতা আরও গুরুত্বপূর্ণ। একটুকু অ্যাকসেন্ট রং রাখুন, পরিষ্কার ফন্ট ব্যবহার করুন, এবং টোটালগুলো সহজে স্ক্যান করার মতো করুন।
লেআউট সমস্যা বাস্তব ডেটা দিয়ে দেখা যায়। দীর্ঘ বর্ণনা ও 30+ লাইন আইটেম নিয়ে টেস্ট করুন। নিশ্চিত করুন কলাম হেডারগুলো নতুন পেজে রিপিট করে এবং টোটাল ব্লক একসাথে থাকে।
যদি আপনি AppMaster-এ PDF জেনারেট করছেন, PDF-কে ইনভয়েসের একটি আর্টিফ্যাক্ট হিসেবে বিবেচনা করুন: ফাইল (বা স্টোরেজ রেফারেন্স) ইনভয়েস রেকর্ডে সেভ করুন একটি জেনারেটেড টাইমস্ট্যাম্প ও ভার্সনসহ। এতে একই ডকুমেন্ট পুনরায় পাঠানো সহজ হয়।
ধাপে ধাপে নির্মাণ পরিকল্পনা (নো-কোড ওয়ার্কফ্লো)
নির্ধারণ করুন কী "সোর্স অব ট্রুথ"। টাইম এন্ট্রিগুলো কাঁচা বাস্তবতা। ইনভয়েসগুলো হলো একটি স্ন্যাপশট যেটা আপনি পাঠাতে এবং পরে অডিট করতে পারবেন।
1) প্রথমে ডেটা মডেল তৈরি করুন
টেবিল ও সম্পর্ক তৈরি করুন, তারপর কিছু কোয়ালিটি ফিল্ড যোগ করুন যখন বেসিকগুলো স্থিতিশীল হবে:
- Clients
- Projects
- Time Entries
- Invoices
- Invoice Lines
2) দুইটা সরল স্ক্রিন বানান
UI-কে মিনিমাল রাখুন:
- টাইম এন্ট্রি ফর্ম: project, date, duration, notes, save
- ইনভয়েস রিভিউ: client, period, lines, totals, status
একটি ওয়েব UI সাধারণত অ্যাডমিন এবং রিভিউয়ের জন্য যথেষ্ট। পরে মোবাইল স্ক্রিন যোগ করুন যদি মানুষ চলতে চলতে টাইম লগ করে।
3) রোল-আপ লজিক অটোমেট করুন
একটি ফ্লো বানান: ক্লায়েন্ট + তারিখ পরিসীমা সিলেক্ট করুন, unbilled এন্ট্রিগুলো ফেচ করুন, সেগুলো গ্রুপ করুন, ইনভয়েস লাইন তৈরি করুন। এন্ট্রিগুলো কেবল তখনই বিল হিসেবে চিহ্নিত করুন যখন ইনভয়েস অনুমোদিত বা Ready-তে নিয়ে সেটি করা হয়।
4) PDF জেনারেট এবং স্টোর করুন
একটি "Generate PDF" অ্যাকশন যোগ করুন যা ইনভয়েস হেডার, ক্লায়েন্ট ডিটেইল এবং লাইনের টেমপ্লেটে টেনে আনে, তারপর আউটপুট ইনভয়েস রেকর্ডে সেভ করে।
উদাহরণ: সাপ্তাহিক টাইম লগ থেকে ক্লায়েন্ট-রেডি ইনভয়েস
একটি ৩-জনের এজেন্সির একটি ক্লায়েন্ট Northstar Co আছে এবং তারা দুইটো প্রজেক্টে দুই সপ্তাহের জন্য বিল করে: Website Refresh এবং Monthly Support. টিমে আছে Alex (ডিজাইন), Priya (ডেভ), এবং Sam (PM). প্রত্যেকে প্রতিদিন টাইম লগ করে, ক্লায়েন্ট, প্রজেক্ট, তারিখ ও একটি ছোট নোট বেছে নিয়ে।
প্রতিদিন এন্ট্রিগুলো Draft হিসেবে সেভ হয়। শুক্রবার বিকেলে Sam "This week, Northstar Co" ফিল্টার করা একটি রিভিউ স্ক্রিন খুলে। তিনটে নোট ঠিক করে ("Homepage hero" এর বদলে "Hero"), billable বনাম non-billable কনফার্ম করে, এবং সপ্তাহটি লক করে।
নিচে সাপ্তাহিক এন্ট্রিগুলোর নমুনা:
| Date | Person | Project | Hours | Note |
|---|---|---|---|---|
| Mon | Priya | Website Refresh | 2.5 | Header layout fixes |
| Tue | Alex | Website Refresh | 3.0 | New homepage mock |
| Tue | Sam | Monthly Support | 1.0 | Client call |
| Wed | Priya | Website Refresh | 4.0 | Contact form logic |
| Thu | Alex | Monthly Support | 1.5 | Banner update |
| Thu | Priya | Monthly Support | 2.0 | Email template tweak |
| Fri | Sam | Website Refresh | 1.0 | QA and handoff |
Sam যখন "Create invoice" ক্লিক করে, অ্যাপটি সিম্পল রুল অনুসারে এন্ট্রিগুলোকে ইনভয়েস লাইনে রোল করে: প্রজেক্ট এবং বিলেবল রেট অনুযায়ী গ্রুপ করে, ঘণ্টা যোগ করে, এবং একটি সংক্ষিপ্ত বর্ণনা নিয়ে আসে। ইনভয়েসে শেষে ৩টি লাইন থাকে:
| Line | Description | Qty | Rate | Amount |
|---|---|---|---|---|
| 1 | Website Refresh (Design) | 3.0 hrs | $120 | $360 |
| 2 | Website Refresh (Development/PM) | 7.5 hrs | $140 | $1,050 |
| 3 | Monthly Support | 4.5 hrs | $110 | $495 |
সিস্টেম একটি ইনভয়েস নম্বর দেবে (যেমন NS-2026-014), সাবটোটাল ও ট্যাক্স হিসাব করে এবং স্ট্যাটাস Ready করবে। আরেকটি ক্লিকেই একটি ব্র্যান্ডেড PDF (লোগো, ক্লায়েন্ট ঠিকানা, লাইন ডিটেইল, টোটাল, পেমেন্ট নোট) জেনারেট হয়। পাঠানোর পর স্ট্যাটাস Sent-এ আপডেট হয় এবং বেস টাইম এন্ট্রিগুলোকে billed হিসেবে চিহ্নিত করা হয় যাতে সেগুলো আবার বিল না করা যায়।
সাধারণ ভুলগুলো এবং কীভাবে এড়াবেন
অধিকাংশ সমস্যা গণিতের সমস্যা নয় — ওয়ার্কফ্লোর সমস্যা।
বিলড টাইম এন্ট্রি লক না করা। যদি মানুষ এন্ট্রি এডিট করতে পারে বা একই এন্ট্রি নতুন ইনভয়েসে পুনরায় সিলেক্ট করতে পারে, ডাবল বিলিং এক সময়ে ঘটে। সমাধান: প্রতিটি টাইম এন্ট্রিতে একটি ইনভয়েস রেফারেন্স রাখুন, এবং "ready to invoice" ভিউ থেকে বিলড এন্ট্রিগুলো লুকিয়ে রাখুন।
রেট বদলালে ইতিহাস আবার লেখা। যদি আপনি কেবল একটি "current" প্রজেক্ট বা ইউজার রেট ব্যবহার করে হিসাব করেন, রেট বদলালে পুরনো ইনভয়েসও বদলে যাবে। প্রতিটি এন্ট্রিতে কার্যকর রেট rate_at_time কপি করে রাখুন।
অনুমোদিত সময় এডিট করার পরে অডিট ট্রেইল না থাকা। অনুমোদনের পরে এডিট হলে "Approved by", "Approved at" এবং একটি ছোট পরিবর্তন নোট যোগ করুন।
রিয়েল ডেটা দিয়ে PDF ভেঙে যাওয়া। দীর্ঘ বর্ণনা, অনেক লাইনের আইটেম, এবং বড় সংখ্যা আপনার টেমপ্লেটকে টেস্ট করবে।
দ্রুত সমাধান যা বেশিরভাগ লেআউট সমস্যা আটকায়:
- একটি সর্বোচ্চ বর্ণনা দৈর্ঘ্য সেট করুন এবং অতিরিক্ত টেক্সট নোট সেকশনে সরান
- মোচড়ানো (wrapping) অনুমতি দিন এবং 30+ রো দিয়ে টেস্ট করুন
- হেডার কমপ্যাক্ট রাখুন যাতে টেবিলের জন্য স্থান থাকে
- ধারাবাহিক নম্বর ফরম্যাট ব্যবহার করুন (কারেন্সি, দশমিক)
মোটা মোটা স্ট্যাটাস ফ্লো। স্পষ্ট নিয়ম ছাড়া ইনভয়েস দুইবার পাঠানো বা একদমই পাঠানো না হওয়ার সমস্যা দেখা দেয়।
সহজ, সুরক্ষিত ফ্লো: Draft -> Ready -> Sent -> Paid। কেবল Draft-এই রোল-আপ করার অনুমতি দিন, এবং কেবল Ready-তে টোটাল লক থাকলে PDF জেনারেট অনুমোদন করুন।
একটি সংক্ষিপ্ত চেকলিস্ট এবং বাস্তবিক পরবর্তী ধাপ
ইনভয়েস পাঠানোর আগে একটি দ্রুত রিভিউ করুন। এটি সবচেয়ে সাধারণ সমস্যা আটকায়: ভুল টোটাল, অনুপস্থিত বিবরণ, এবং PDF যা স্ক্রিনে ঠিক দেখা যায় কিন্তু প্রিন্ট করলে ভাঙে।
পাঠানোর পূর্বে চেকলিস্ট:
- ক্লায়েন্ট বিবরণ পূর্ণ (আইনি নাম, বিলিং ঠিকানা, সঠিক কন্টাক্ট)
- ইনভয়েস পিরিয়ড সঠিক (স্টার্ট ও শেষ তারিখ কাজের সাথে মিলে)
- টোটাল কনসিস্টেন্ট (subtotal, tax, grand total এন্ট্রি, রেট, এবং রাউন্ডিংয়ের সাথে মিলছে)
- কোনো সময় মিস বা ডুপ্লিকেট নেই (কিছু বিলে ছাড়া নেই, কিছু দুবার অন্তর্ভুক্ত নয়)
- অপারেশনাল ফিল্ডগুলো পরিষ্কার (ইউনিক ইনভয়েস নম্বর, সঠিক স্ট্যাটাস, ইনভয়েসে PDF সেভ করা আছে)
তারপর PDF-কে "প্রিন্টারের চোখে" প্রিভিউ করুন। লোগো অবস্থান, দীর্ঘ ঠিকানা, টেবিল মোচড়ানো, এবং পেজ ব্রেক দেখুন। ছোট ইনভয়েস (1-2 লাইন) এবং বড় ইনভয়েস (20+ লাইন) উভয় টেস্ট করুন।
বেসিকগুলো স্থিতিশীল হলে পরবর্তী ধাপগুলো:
- কনসিস্টেন্ট টেমপ্লেট দিয়ে ইমেইল দ্বারা ইনভয়েস পাঠান
- Stripe পেমেন্ট সংযুক্ত করুন এবং ইনভয়েস অটোমেটিকভাবে Paid হিসেবে চিহ্নিত করুন
- পারমিশন যোগ করুন যাতে কেবল উপযুক্ত রোলের লোকেরা রেট, সময় অনুমোদন, বা স্ট্যাটাস পরিবর্তন করতে পারে
আপনি যদি দ্রুত ইটারেট করতে চান এবং সবকিছুকে নো-কোড দিয়ে আবার না লিখতে চান, AppMaster (appmaster.io) একটি বাস্তব অপশন: একটি নো-কোড ইনভয়িসিং অ্যাপ বানান যার ব্যাক-এন্ড ডাটাবেস, বিজনেস লজিক, এবং PDF জেনারেশন আছে, এবং প্রয়োজন বদলালে ক্লিন সোর্স কোড রিজেনারেট করুন।
এই সপ্তাহে যদি আপনি কেবল একটাই জিনিস উন্নত করেন, সেটা হোক — "unbilled time" খুঁজে পাওয়া অসম্ভব করে দিন না। একটুকু কাজই ঘণ্টা বাঁচায় এবং আয় রক্ষা করে।
প্রশ্নোত্তর
প্রতিটি টাইম এন্ট্রিতে একটি প্রজেক্ট, তারিখ, সময়কাল এবং একটি ছোট বর্ণনা থাকা নিশ্চিত করে শুরু করুন। তারপর ক্লায়েন্ট ও তারিখ পরিসীমা নির্বাচন করে একটি ইনভয়েস তৈরি করুন, শুধুমাত্র বিলে না হওয়া এন্ট্রিগুলো টানুন, সেগুলোকে ইনভয়েস লাইনে গ্রুপ করুন, এবং ইনভয়েস স্ন্যাপশট থেকে PDF জেনারেট করুন।
পাঁচটি রেকর্ড ব্যবহার করুন: Client, Project, Time Entry, Invoice, এবং Invoice Line. ফিল্ডগুলো কম রাখুন, কিন্তু প্রত্যেক টাইম এন্ট্রিতে rate_at_time এবং একটি invoiced_invoice_id রেফারেন্স রাখুন যাতে বিলিং ইতিহাস কনসিস্টেন্ট থাকে এবং ডাবল বিলিং প্রতিরোধ করা যায়।
যখনও কাজের সময় ব্যবহৃত রেটটি প্রতিটি টাইম এন্ট্রিতে সংরক্ষণ করুন (যেমন rate_at_time). ডিফল্ট রেট Project বা Person-এ রাখা যেতে পারে, কিন্তু ইনভয়েস সবসময় সংরক্ষিত রেট থেকে হিসাব করবে যাতে পুরনো ইনভয়েসগুলো রেট বদলালে পরিবর্তিত না হয়।
একটি রাউন্ডিং নিয়ম বেছে নিন এবং সেটি মেনে চলুন, তারপর আপনার প্রক্রিয়ায় তা দৃশ্যমান রাখুন। সাধারণ একটা পদ্ধতি হলো প্রতিটি এন্ট্রিকে ৬-মিনিট ইক্রিমেন্টে (0.1 ঘন্টা) রাউন্ড করা — এটা অডিট করা সহজ এবং ইনভয়েস টোটালগুলো পূর্বানুমেয় রাখে।
ইনভয়েসে একটি স্ট্যাটাস ফিল্ড ব্যবহার করুন এবং এটিকে সরল রাখুন: Draft, Ready, Sent, Paid (কেবল ক্যান্সেল করার প্রয়োজন হলে Void যোগ করুন)। স্পষ্ট নিয়ম রাখুন যেমন “রোল-আপ কেবল Draft-এ করা যাবে” এবং “Ready-তে টোটাল লক করা থাকবে” যাতে কেউ ভুলবশত পাঠানো জিনিস বদলাতে না পারে।
ইনভয়েস তৈরির সময় কেবল এমন টাইম এন্ট্রিগুলো টানুন যেগুলোর invoiced_invoice_id খালি আছে, এবং এন্ট্রিগুলো ইনভয়েসে যুক্ত হতেই সেই ক্ষেত্রটি সেট করে দিন। এছাড়া “ready to invoice” ভিউ থেকে বিলে হওয়া এন্ট্রিগুলো লুকিয়ে রাখুন যাতে একই টাইম পুনরায় নির্বাচিত না হয়।
PDF ইনভয়েসটি ইনভয়েস রেকর্ড থেকেই জেনারেট করুন, কাঁচা টাইম এন্ট্রি থেকে নয়, যাতে ডকুমেন্টটি সবসময় ইনভয়েস নম্বর, টোটাল এবং স্ট্যাটাসের সাথে মিলে। পরিষ্কার হেডার, ক্লায়েন্ট ডিটেইল, লাইন আইটেম, টোটাল এবং পেমেন্ট নির্দেশাবলী অন্তর্ভুক্ত করুন, এবং দীর্ঘ বর্ণনা ও 30+ লাইনের সঙ্গে টেমপ্লেট পরীক্ষা করুন যাতে লেআউট ব্রেক না করে।
ইতিবাচক ইতিহাস মুছে ফেলবেন না। প্রভাবিত টাইম এন্ট্রিগুলো ইনভয়েস রেফারেন্স থেকে আনলিংক করুন (invoice রেফারেন্স ক্লিয়ার করুন), ইনভয়েস লাইন ও টোটালগুলো পুনরায় তৈরি করুন, এবং একটি সংক্ষিপ্ত সংশোধনী নোট রাখুন যাতে পরে বোঝানো যায় কী বদলানো হয়েছে।
প্রথমে ম্যানুয়াল টাইম এন্ট্রি দিয়ে শুরু করুন — এটা বানাতে দ্রুত এবং সংশোধন করা সহজ। টাইমার যোগ করলে অতিরিক্ত এজ-কেস আসে (মিসড স্টপ, এডিট, ডিভাইস সমস্যা), তাই কোর ওয়ার্কফ্লো নির্ভরযোগ্য হওয়ার পরই টাইমার যোগ করা উত্তম।
প্রাথমিকভাবে কোর ফ্লো বানান: টাইম এন্ট্রি ক্যাপচার, অনুমোদন/লকিং, বিলে না হওয়া টাইম থেকে ইনভয়েস তৈরি, এবং PDF জেনারেশন। প্রথম ভার্সনে ট্যাক্স, মাল্টি-কারেন্সি, ডিসকাউন্ট এবং অ্যাটাচমেন্ট বাদ দিন কারণ সেগুলো এজ-কেস বাড়ায় এবং গণনা জটিল করে।


