टाइम ट्रैकिंग से इनवॉइस ऐप: प्रविष्टियों से ब्रांडेड PDFs तक
एक ऐसा ऐप बनाएं जो प्रोजेक्ट के घंटे कैप्चर करे, उन्हें इनवॉइस में बदल दे, और क्लाइंट के लिए ब्रांडेड PDF फाइलें जनरेट करे।

आप क्या बना रहे हैं और यह क्यों मायने रखता है
एक टाइम‑ट्रैकिंग से इनवॉइस ऐप एक सामान्य अव्यवस्था को ठीक करता है: घंटों का डेटा कैलेंडरों, चैट्स और नोट्स में बिखर जाता है। फिर जब इनवॉइस भेजने का दिन आता है तो किसी को पूरे महीने को हाथ से फिर से बनाना पड़ता है। यही जगह है जहाँ गलती होती हैं: बिल करने योग्य समय छूट जाना, गलत दरें, डुप्लिकेट लाइनें, या जो टोटल दिख रहे हों वे मेल न खाएं।
यह ऐप उन लोगों के लिए है जो घंटे के हिसाब से बिल करते हैं और एक दोहराने योग्य प्रक्रिया चाहते हैं: फ्रीलांसर जो कई क्लाइंट संभालते हैं, एजेंसियाँ जिनमें कई लोग एक ही प्रोजेक्ट पर समय लॉग करते हैं, और आंतरिक टीमें जो क्लाइंट या डिपार्टमेंट को टाइम चार्ज करती हैं।
लक्ष्य व्यावहारिक है: प्रोजेक्ट द्वारा टाइम एंट्रीज़ कैप्चर करें, उन्हें एक इनवॉइस रिकॉर्ड में रोल‑अप करें, और क्लाइंट के लिए समझने योग्य ब्रांडेड PDF जनरेट करें। जब यह वर्कफ़्लो भरोसेमंद हो जाता है, तो इनवॉइसिंग महीनावार की घबराहट नहीं रहती।
"सिंपल फ़र्स्ट" रखने का मतलब अक्सर होता है:
- टाइम लॉग करने का एक ही तरीका (तारीख, प्रोजेक्ट, घंटे, नोट)
- एक ही दर नियम (प्रोजेक्ट पर या व्यक्ति पर)
- एक ही पीरियड के लिए प्रति क्लाइंट एक इनवॉइस
- अपने लोगो और बिज़नेस डिटेल्स के साथ एक ही PDF लेआउट
- साफ़ स्टेटस ( ड्राफ्ट, तैयार, भेजा गया , भुगतान प्राप्त )
एक छोटा उदाहरण: एक दो‑व्यक्ति स्टूडियो "Client A - Website Updates" के लिए समय ट्रैक करता है। हर व्यक्ति पूरे सप्ताह में एंट्रीज़ लॉग करता है। शुक्रवार को आप उस प्रोजेक्ट और तारीख रेंज के लिए इनवॉइस बनाते हैं, ऐप एंट्रीज़ को इनवॉइस लाइनों में बदल देता है, और PDF बिना किसी पुनर्लेखन के भेजने के लिए तैयार होता है।
यदि आप AppMaster जैसे नो‑कोड प्लेटफ़ॉर्म का उपयोग कर रहे हैं, तो अतिरिक्त चीजें जैसे रसीदें, मल्टी‑करेंसी, छूट, या अनुमोदन जोड़ने से पहले डेटा और वर्कफ़्लो को सही बनाएं। कोर फ्लो जब तेज़, सटीक और टूटने में मुश्किल हो तो एक्स्ट्रा फ़ीचर्स जोड़ना आसान होता है।
शामिल करने के लिए कोर फ़ीचर्स (और शुरुआत में क्या छोड़ें)
एक छोटा पहला वर्शन आपको "भेजने योग्य इनवॉइस" जल्दी दे देता है। तीन चीज़ों पर ध्यान दें: समय कैप्चर करें, समय को स्पष्ट इनवॉइस लाइनों में बदलें, और एक ऐसा PDF बनाएं जिसे क्लाइंट बिना फ़ॉलो‑अप के पढ़ सके।
कुछ कोर रिकॉर्ड्स से शुरू करें (आप बाद में नाम बदल सकते हैं, लेकिन संरचना मायने रखती है): Client, Project, Time Entry, Invoice, और Invoice Line।
इनवॉइस वर्कफ़्लो को साधारण रखें: इनवॉइस रिकॉर्ड पर एक सिंगल स्टेटस फ़ील्ड। Draft, Ready, Sent, Paid ज़्यादातर टीमों के लिए काफी रहेगा।
आपके आवश्यक एक्ट्शन्स को हर हफ्ते होने वाली चीज़ों से मेल खाना चाहिए:
- समय लॉग करें (मैन्युअल एंट्री आमतौर पर सबसे तेज़ बनाने और सुधारने में आसान)
- समय स्वीकार करें (चाहे बस एक "Approved" स्टेटस ही हो)
- स्वीकृत समय से इनवॉइस बनाएं
- PDF एक्सपोर्ट करें
"ब्रांडेड" का मतलब फैंसी नहीं है। इसका मतलब सुसंगत और भरोसेमंद है: लोगो, बिज़नेस डिटेल्स, इनवॉइस नंबर और तारीखें, स्पष्ट टोटल्स और भुगतान निर्देश।
शुरू में किन चीज़ों को छोड़ें: टैक्स, डिस्काउंट, मल्टी‑करेंसी और अटैचमेंट। ये उपयोगी हैं, लेकिन राउंडिंग, क्षेत्रीय नियम, एक्सचेंज रेट्स और फ़ाइल स्टोरेज जैसे एज‑केस लाते हैं जो पहले रिलीज़ को धीमा कर देते हैं।
डेटा मॉडल: जिन रिकॉर्ड्स की ज़रूरत है और जो फ़ील्ड्स मायने रखते हैं
एक टाइम‑ट्रैकिंग से इनवॉइस ऐप अपनी डेटा मॉडल पर जीवित या मरता है। इसे छोटा और अनुमान्य रखें ताकि टोटल्स हमेशा वही हों जो आपने क्लाइंट को वादा किया था।
एक न्यूनतम सेट आमतौर पर इस तरह दिखता है:
- Client: नाम, बिलिंग ईमेल, बिलिंग पता, डिफ़ॉल्ट करेंसी, पेमेंट टर्म्स (जैसे Net 14)
- Project: client_id, प्रोजेक्ट नाम, डिफ़ॉल्ट घंटे की दर (optional), active फ्लैग
- Time entry: project_id, व्यक्ति (नाम या user_id), तारीख, अवधि (घंटे), विवरण, rate_at_time, बिल करने योग्य (हाँ/नहीं), invoiced_invoice_id (बिल होने तक खाली)
- Invoice: client_id, project_id (विकल्पिक), इनवॉइस नंबर, जारी करने की तारीख, देय तारीख, स्टेटस, सबटोटल, टैक्स, कुल
दरें वहीं जगह हैं जहाँ ऐप्स जटिल हो जाते हैं। एक दृष्टिकोण चुनें और उसी पर टिके रहें: प्रति प्रोजेक्ट दर, प्रति व्यक्ति दर, या फिक्स्ड प्रति टास्क/सर्विस।
भले ही आप प्रोजेक्ट या व्यक्ति पर डिफ़ॉल्ट दर स्टोर करें, हर टाइम एंट्री में वास्तविक दर को rate_at_time के रूप में कॉपी करें जब एंट्री बनाई या अप्रूव्ड हो। इससे बाद में दरें बदलने पर सरप्राइज़ नहीं होंगे। इनवॉइस को उसी समय की सच्चाई दर्शानी चाहिए जब काम हुआ था।
टाइम एंट्रीज़ के लिए आप अक्सर अलग स्टेटस छोड़ सकते हैं और यह इस पर भरोसा कर सकते हैं कि invoiced_invoice_id खाली है या नहीं। इनवॉइस के लिए स्टेटस सख़्त रखें: ड्राफ्ट, तैयार, भेजा गया, भुगतान प्राप्त (और अगर आपको क्लीन कैंसलेशन चाहिए तो रद्द जोड़ें)।
AppMaster में, Data Designer PostgreSQL से आसानी से मैप करता है और रिश्तों को स्पष्ट रखने में मदद करता है बिना हर जगह फ़ील्ड्स को डुप्लिकेट किए।
प्रोजेक्ट द्वारा टाइम एंट्रीज़ कैप्चर करना (सादा UX)
टाइम कैप्चर वह जगह है जहाँ ऐप या तो सहज लगता है या नजरअंदाज़ हो जाता है। पहला वर्शन उबाऊ और तेज़ रखें: एक स्क्रीन, एक प्राइमरी एक्शन, और जितनी कम चॉइसेज़ हो उतना ठीक।
शुरू में एक कैप्चर मेथड चुनें। मैन्युअल एंट्री शुरुआती दौर में अक्सर जीतती है क्योंकि यह हर किसी के लिए काम करती है और समीक्षा के लिए आसान होती है। एक टाइमर बाद में आएगा जब आप समझ लें कि लोग असल में अपना दिन कैसे ट्रैक करते हैं। अगर आप टाइमर जोड़ते हैं, तो मिस्ड स्टॉप्स के लिए मैन्युअल एडिट्स की अनुमति दें।
बिलिंग क्वालिटी की रक्षा करने वाले फ़ील्ड्स को आवश्यक बनाएं:
- प्रोजेक्ट (या क्लाइंट + प्रोजेक्ट)
- तारीख
- अवधि (घंटे और मिनट)
- छोटा विवरण (कुछ ऐसा जो क्लाइंट पहचान सके)
- व्यक्ति (यदि एक से अधिक टीम‑मेट समय लॉग करते हैं)
राउंडिंग नियम जल्दी तय करें क्योंकि वे भरोसा और टोटल्स को प्रभावित करते हैं। एक सामान्य तरीका है 6‑मिनट के इंक्रीमेंट (0.1 घंटे)। स्पष्ट करें कि आप हर एंट्री को राउंड करते हैं या दैनिक टोटल को। हर एंट्री को राउंड करना समझाने और ऑडिट करने में सरल है।
यदि बिलिंग में एक से अधिक व्यक्ति शामिल हैं, तो एक हल्का अप्रूवल स्टेप जोड़ें। एक व्यावहारिक नियम: एक बार अप्रूव्ड होने के बाद एंट्रीज़ डिफ़ॉल्ट रूप से एडिट के लिए लॉक रहें। अगर कुछ बदलना है, तो मैनेजर रोल को उसे रीओपन करने की अनुमति दें और रिकॉर्ड करें किसने और क्यों बदला।
टाइम को इनवॉइस लाइनों में बदलना (रोल‑अप नियम)
रोल‑अप वह जगह है जहाँ कच्चे लॉग एक क्लाइंट के लिए समझने योग्य इनवॉइस लाइनों में बदलते हैं। नियमों को सरल और दोहराने योग्य रखें ताकि आप हर जनरेट किए गए इनवॉइस पर भरोसा कर सकें।
एक एक्शन से शुरू करें: एक क्लाइंट और तारीख रेंज चुनें, फिर केवल वे अनबिल्ड टाइम एंट्रीज़ खींचें जो मैच करती हैं। यह फ़िल्टर डुप्लिकेट बिलिंग रोकने के लिए गार्डरेल है। अगर किसी एंट्री में क्लाइंट या प्रोजेक्ट गायब है, तो उसे "बिल करने के लिए तैयार नहीं" मानें और उसे रोल‑अप से बाहर रखें जब तक कि वह ठीक न हो।
एंट्रीज़ को इनवॉइस लाइनों में कैसे समूहित करें
ग्रुपिंग यह तय करती है कि कितनी लाइन्स बनेंगी और क्लाइंट के लिए कितनी समीक्षा आसान होगी। एक डिफ़ॉल्ट चुनें, और यदि लचीलापन चाहिए तो एक वैकल्पिक स्विच जोड़ें।
सामान्य ग्रुपिंग विकल्प:
- प्रोजेक्ट द्वारा
- व्यक्ति द्वारा (जब दरें अलग हों तब उपयोगी)
- दिन या हफ्ते द्वारा
- टास्क/कैटेगरी द्वारा (डिज़ाइन बनाम डेवलपमेंट)
जो भी चुनें, हर लाइन में यह दिखना चाहिए: स्पष्ट लेबल, कुल घंटे, दर, और लाइन अमाउंट। अगर दरें बदल सकती हैं, तो rate_at_time का उपयोग करें जो हर एंट्री पर सेव है (या एक रेट टेबल जिसमें “effective from” तारीखें हों), न कि एक सिंगल "करेंट रेट"।
बिल्ड के रूप में मार्क करें (बिना खुद को कोने में पोंछने के)
जब आप एंट्रीज़ को इनवॉइस में जोड़ते हैं, तो हर टाइम एंट्री पर इनवॉइस ID स्टोर करें। इससे ऑडिट ट्रेल बनता है और वही एंट्री फिर से नहीं खींची जा सकती।
सुधार होते हैं। अगर आप किसी इनवॉइस से एक लाइन हटा देते हैं, तो इतिहास न मिटाएँ। प्रभावित टाइम एंट्रीज़ का लिंक अनलिंक करें (invoice ID साफ करें), टोटल्स को पुनर्गणना करें, और "2.0h हटाया, गलत प्रोजेक्ट" जैसे छोटे नोट स्टोर करें।
AppMaster में, यह एक ही बिजनेस प्रोसेस के रूप में फिट बैठता है: अनबिल्ड एंट्रीज़ क्वेरी करें, उन्हें ग्रुप करें, इनवॉइस लाइन्स बनाएं, फिर हर एंट्री को इनवॉइस संदर्भ से अपडेट करें।
इनवॉइस रिकॉर्ड्स: टोटल्स, नंबरिंग और स्टेटस
इनवॉइस रिकॉर्ड वह कंटेनर है जिसे आप भेज सकते हैं, ट्रैक कर सकते हैं और बाद में ऑडिट कर सकते हैं। इसे स्थिर रखें भले ही कोई प्रोजेक्ट नाम एडिट करे या डिफ़ॉल्ट दर बदले।
एक व्यावहारिक इनवॉइस हेडर में शामिल हो:
- इनवॉइस नंबर (यूनिक, मानव‑पाठ्य)
- जारी करने की तारीख और देय तारीख
- बिल‑टू विवरण (क्लाइंट नाम, बिलिंग पता, टैक्स ID यदि ज़रूरी)
- नोट्स (पेमेंट निर्देश, एक छोटी धन्यवाद पंक्ति)
- करेंसी (और वैकल्पिक रूप से अगर आप अंतररराष्ट्रीय बिल करते हैं तो सेव्ड एक्सचेंज रेट)
टोटल्स को अनुमान्य रखें। सबटोटल इनवॉइस लाइनों का जोड़ है। फिर डिस्काउंट (फिक्स्ड या प्रतिशत) लागू करें, टैक्स की गणना करें (अक्सर डिस्काउंट किए गए सबटोटल पर), और फाइनल टोटल स्टोर करें। उपयोग किए गए सटीक टैक्स रेट और डिस्काउंट मान सेव करें ताकि बाद में इनवॉइस को फिर से उत्पन्न किया जा सके।
इनवॉइस नंबरिंग को फैंसी होने की ज़रूरत नहीं है। एक पैटर्न चुनें और उसी पर टिके रहें: सीक्वेंशियल (000123), प्रति वर्ष (2026-00123), या क्लाइंट प्रीफ़िक्स + सीक्वेंस (ACME-014)। सुसंगतता परफेक्शन से ज़्यादा मायने रखती है।
स्टेटस संचार और आंतरिक नियंत्रण पर केंद्रित रहें:
- ड्राफ्ट (संपादनीय, नहीं भेजा गया)
- तैयार (टोटल्स लॉक)
- भेजा गया (क्लाइंट के साथ साझा किया गया)
- भुगतान प्राप्त (पेमेंट कन्फर्म हुआ)
- देय तारीख पार (Overdue)
- रद्द (कैंसिल किया गया, इतिहास के लिए रखा गया)
क्लाइंट‑पढ़ने योग्य ब्रांडेड PDF जनरेट करना
एक अच्छा इनवॉइस PDF दो प्रश्नों का जल्दी उत्तर देता है: क्या बिल किया जा रहा है, और कैसे भुगतान करना है। इनवॉइस रिकॉर्ड से PDF जनरेट करें (कच्ची टाइम एंट्रीज़ से नहीं) ताकि दस्तावेज़ हमेशा इनवॉइस नंबर, टोटल्स और स्टेटस से मेल खाए।
ज्यादातर क्लाइंट हर बार एक ही ब्लॉक्स की उम्मीद करते हैं:
- हेडर जिसमें आपका बिज़नेस नाम, इनवॉइस नंबर और तारीख
- क्लाइंट डिटेल्स (कंपनी, संपर्क नाम, बिलिंग पता, टैक्स ID अगर ज़रूरी)
- लाइन आइटम्स (विवरण, मात्रा या घंटे, दर, लाइन टोटल)
- टोटल्स (सबटोटल, टैक्स, डिस्काउंट, ग्रैंड टोटल)
- पेमेंट टर्म्स (देय तारीख, स्वीकार्य तरीके, यदि आप लेट फीस उपयोग करते हैं तो उसका नोट)
ब्रांडिंग मायने रखती है, लेकिन पठनीयता ज़्यादा मायने रखती है। एक एकोडेन्ट रंग रखें, साफ़ फ़ॉन्ट इस्तेमाल करें, और टोटल्स को स्कैन करने में आसान बनाएं।
लेआउट इश्यू असली डेटा के साथ दिखते हैं। लंबी विवरण और 30+ लाइन आइटम्स के साथ टेस्ट करें। सुनिश्चित करें कि कॉलम हेडर नई पेज पर दोहराएं और टोटल ब्लॉक साथ रहे।
यदि आप AppMaster में PDF जेनरेट कर रहे हैं, तो PDF को इनवॉइस का आर्टिफैक्ट मानें: फ़ाइल (या स्टोरेज रेफ़रेंस) को इनवॉइस रिकॉर्ड पर जेनरेटेड टाइमस्टैम्प और वर्ज़न के साथ सेव करें। इससे वही डॉक्यूमेंट फिर से भेजना आसान हो जाता है जिसे क्लाइंट ने देखा था।
स्टेप‑बाय‑स्टेप बिल्ड प्लान (नो‑कोड वर्कफ़्लो)
निर्णय लें कि "सोर्स ऑफ़ ट्रुथ" क्या होगा। टाइम एंट्रीज़ कच्चे तथ्य हैं। इनवॉइस स्नैपशॉट वह है जिसे आप भेजते हैं और बाद में ऑडिट कर सकते हैं।
1) पहले डेटा मॉडल बनाएं
टेबल्स और रिश्ते बनाएं, फिर कुछ क्वालिटी फ़ील्ड्स जोड़ें जब बेसिक्स स्थिर हों:
- Clients
- Projects
- Time Entries
- Invoices
- Invoice Lines
2) दो साधारण स्क्रीन बनाएं
UI को न्यूनतम रखें:
- टाइम एंट्री फॉर्म: प्रोजेक्ट, तारीख, अवधि, नोट्स, सेव
- इनवॉइस रिव्यू: क्लाइंट, पीरियड, लाइन्स, टोटल्स, स्टेटस
एक वेब UI आमतौर पर एडमिन और रिव्यू के लिए पर्याप्त होता है। बाद में मोबाइल स्क्रीन जोड़ें यदि लोग ऑन‑द‑गो समय लॉग करते हैं।
3) रोल‑अप लॉजिक ऑटोमेट करें
ऐसा फ्लो बनाएं: क्लाइंट + तारीख रेंज चुनें, अनबिल्ड एंट्रीज़ फेच करें, उन्हें ग्रुप करें, इनवॉइस लाइन्स बनाएं। एंट्रीज़ को केवल तब बिल्ड के रूप में मार्क करें जब इनवॉइस अप्रूव्ड हो या Ready में ले जाया गया हो।
4) PDF जनरेट करके स्टोर करें
एक "Generate PDF" एक्शन जोड़ें जो इनवॉइस हेडर, क्लाइंट डिटेल्स और लाइन्स को एक टेम्पलेट में पुल करे, फिर आउटपुट को इनवॉइस रिकॉर्ड पर सेव करे।
उदाहरण: साप्ताहिक टाइम लॉग्स से क्लाइंट‑रेडी इनवॉइस तक
एक 3‑व्यक्ति एजेंसी की एक क्लाइंट है, Northstar Co, और वे दो प्रोजेक्ट्स के लिए दो हफ्तों का बिल करते हैं: Website Refresh और Monthly Support। टीम में Alex (डिज़ाइन), Priya (डेव), और Sam (PM) हैं। सभी रोज़ाना समय लॉग करते हैं, क्लाइंट, प्रोजेक्ट, तारीख, और छोटा नोट चुनकर।
हर दिन एंट्रीज़ Draft के रूप में सेव होती हैं। शुक्रवार को Sam "This week, Northstar Co" फिल्टर्ड रिव्यू स्क्रीन खोलता है। वह दो नोट्स ठीक करता है ("Homepage hero" की जगह "Hero"), बिल करने योग्य बनाम नॉन‑बिल करने योग्य की पुष्टि करता है, और सप्ताह को लॉक कर देता है।
उस हफ्ते की कुछ एंट्रीज़ का उदाहरण:
| 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" क्लिक करता है, तो ऐप एंट्रीज़ को सरल नियमों से इनवॉइस लाइनों में रोल करता है: प्रोजेक्ट और बिल करने वाली दर द्वारा समूहित करें, घंटे जोड़ें, और एक छोटा विवरण लाएं। इनवॉइस में अंततः 3 लाइनें बनती हैं:
| 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), सबटोटल और टैक्स कैलकुलेट करता है, और स्टेटस को तैयार सेट कर देता है। एक और क्लिक से ब्रांडेड PDF (लोगो, क्लाइंट पता, लाइन डिटेल्स, टोटल, पेमेंट नोट्स) जनरेट होता है। भेजने के बाद स्टेटस भेजा गया हो जाता है और अंतर्निहित टाइम एंट्रीज़ को इनवॉइस्ड के रूप में मार्क कर दिया जाता है ताकि उन्हें दोबारा बिल न किया जा सके।
सामान्य गलतियाँ और उन्हें कैसे बचाएं
ज़्यादातर समस्याएँ गणित की नहीं हैं। वे वर्कफ़्लो की समस्याएँ हैं।
बिल्ड किया हुआ समय लॉक न करना। यदि लोग एंट्रीज़ को एडिट कर सकते हैं या उन्हीं एंट्रीज़ को नए इनवॉइस के लिए फिर से चुन सकते हैं तो डबल बिलिंग होती रहेगी। इसे ठीक करें: हर टाइम एंट्री पर इनवॉइस संदर्भ रखें, और "ready to invoice" व्यू से बिल्ड एंट्रीज़ छुपाएं।
दरें बदलने पर इतिहास को फिर से लिखना। यदि आप केवल एक "करेन्ट" प्रोजेक्ट या यूज़र रेट का उपयोग करते हैं, तो उस रेट को बदलने से पुराने इनवॉइस बदल जाएंगे। प्रभावी दर को हर एंट्री पर rate_at_time में कॉपी करें।
अप्रूव्ड समय को बिना ऑडिट ट्रेल के एडिट करना। "Approved by", "Approved at", और अप्रूवल के बाद किए गए एडिट्स के लिए एक छोटा परिवर्तन नोट जोड़ें।
PDF जो असल डेटा के साथ टूट जाते हैं। लंबी विवरण, बहुत सारी लाइन आइटम्स, और बड़े नंबर आपके टेम्पलेट को स्ट्रेस करेंगे।
तेज़ फिक्स जो ज़्यादातर लेआउट समस्याओं को रोकते हैं:
- अधिकतम विवरण लंबाई सेट करें और ओवरफ़्लो को नोट्स सेक्शन में रखें
- रैपिंग की अनुमति दें और 30+ रो के साथ टेस्ट करें
- हेडर को कॉम्पैक्ट रखें ताकि टेबल को जगह मिले
- संख्या प्रारूपों में सुसंगतता रखें (करेंसी, दशमलव)
एक अस्पष्ट स्टेटस फ्लो। स्पष्ट नियमों के बिना, इनवॉइस दो बार भेजे जा सकते हैं या कभी नहीं भेजे जा सकते।
एक सरल, सुरक्षित फ्लो: Draft -> Ready -> Sent -> Paid। केवल Draft में रोल‑अप की अनुमति दें, और केवल तभी PDF जनरेट करें जब टोटल लॉक हों।
एक छोटी चेकलिस्ट और व्यावहारिक अगले कदम
इनवॉइस भेजने से पहले एक त्वरित रिव्यू करें। यह सबसे सामान्य समस्याओं को रोकता है: गलत टोटल्स, गायब डिटेल्स, और स्क्रीन पर ठीक दिखने वाले पर प्रिंट पर टूटने वाले PDFs।
प्रेस‑सेंड चेकलिस्ट:
- क्लाइंट डिटेल्स पूर्ण हैं (कानूनी नाम, बिलिंग पता, सही संपर्क)
- इनवॉइस पीरियड सही है (शुरू और अंत तारीखें काम से मेल खाती हों)
- टोटल्स सुसंगत हैं (सबटोटल, टैक्स, ग्रैंड टोटल एंट्रीज़, दरें और राउंडिंग से मेल खाते हों)
- कोई समय छूटा या डुप्लिकेट नहीं है (कुछ अनबिल्ड न रहे, कुछ दो बार शामिल न हो)
- ऑपरेशनल फ़ील्ड्स साफ़ हैं (यूनिक इनवॉइस नंबर, सही स्टेटस, इनवॉइस पर PDF सेव)
फिर PDF को "प्रिंटर आँखों" से प्रीव्यू करें। लोगो प्लेसमेंट, लंबे पते, टेबल रैपिंग और पेज ब्रेक्स चेक करें। एक छोटा इनवॉइस (1–2 लाइन्स) और एक लंबा (20+ लाइन्स) दोनों के साथ टेस्ट करें।
एक बार बेसिक्स स्थिर होने पर अगले कदम:
- ईमेल के साथ इनवॉइस भेजें एक सुसंगत टेम्पलेट के साथ
- Stripe पेमेंट जोड़ें और इनवॉइस को ऑटोमैटिकली Paid मार्क करें
- परमिशन्स जोड़ें ताकि केवल सही रोल्स दरें बदल सकें, समय अप्रूव कर सकें, या स्टेटस बदल सकें
यदि आप जल्दी बनाना और इटरेट करना चाहते हैं बिना सब कुछ फिर से लिखे, तो AppMaster (appmaster.io) नो‑कोड विकल्प के रूप में व्यावहारिक है—यह रीयल डेटाबेस, बिजनेस लॉजिक और PDF जेनरेशन देता है, और जैसे‑जैसे आवश्यकताएँ बदलें आप साफ़ सोर्स कोड रीजनरेट कर सकते हैं।
अगर आप इस सप्ताह केवल एक चीज सुधारें, तो "अनबिल्ड समय" को मिस करना असंभव बनाएं। अकेले वही घंटे बचाता है और राजस्व की रक्षा करता है।
सामान्य प्रश्न
सबसे पहले सुनिश्चित करें कि हर टाइम एंट्री में प्रोजेक्ट, तारीख, अवधि और छोटी सी विवरण है। फिर एक क्लाइंट और तारीख रेंज चुनकर इनवॉइस बनाएं, केवल उन अनबिल्ड एंट्रीज़ को खींचें, उन्हें इनवॉइस लाइनों में समूहित करें और इनवॉइस स्नैपशॉट से PDF जनरेट करें।
पाँच रिकॉर्ड का उपयोग करें: Client, Project, Time Entry, Invoice, और Invoice Line। फ़ील्ड्स न्यूनतम रखें लेकिन हर टाइम एंट्री पर rate_at_time और एक invoiced_invoice_id संदर्भ शामिल करें ताकि बिलिंग इतिहास सुसंगत रहे और डबल बिलिंग रोकी जा सके।
काम के समय इस्तेमाल की गई दर को हर टाइम एंट्री पर सेव करें (उदाहरण के लिए rate_at_time)। डिफॉल्ट्स प्रोजेक्ट या व्यक्ति पर रख सकते हैं, लेकिन इनवॉइस हमेशा सेव की गई दर से कैलकुलेट होनी चाहिए ताकि पुरानी इनवॉइसें दर बदलने पर बदल न जाएँ।
एक राउंडिंग नियम चुनें और उस पर टिके रहें, फिर उसे अपनी प्रक्रिया में दिखाएँ। एक आम तरीका है प्रत्येक एंट्री को 6‑मिनट के इंक्रीमेंट (0.1 घंटे) पर राउंड करना—यह ऑडिट के लिए आसान है और इनवॉइस टोटल्स को अनुमानित बनाता है।
इनवॉइस पर एक ही स्टेटस फ़ील्ड रखें और इसे संकुचित रखें: ड्राफ्ट, तैयार, भेजा गया, भुगतान प्राप्त (केवल ज़रूरत हो तो रद्द जोड़ें)। स्पष्ट नियम सेट करें जैसे “roll-up केवल Draft में” और “Ready में टोटल लॉक करें” ताकि लोग गलती से भेजे गए वर्क को न बदल सकें।
इनवॉइस क्रिएशन में केवल उन टाइम एंट्रीज़ को खींचने के लिए फ़िल्टर करें जहाँ invoiced_invoice_id खाली हो, और जैसे ही एंट्रीज़ इनवॉइस से जुड़ें तो यह फ़ील्ड सेट कर दें। साथ ही “ready to invoice” व्यू से बिल्ड एंट्रीज़ छुपा दें ताकि वही समय फिर से चुना न जा सके।
PDF इनवॉइस को इनवॉइस रिकॉर्ड से जनरेट करें, न कि कच्ची टाइम एंट्रीज़ से, ताकि दस्तावेज़ हमेशा इनवॉइस नंबर, टोटल और स्टेटस से मेल खाए। एक साफ हैडर, क्लाइंट डिटेल्स, लाइन आइटम्स, टोटल और भुगतान निर्देश शामिल करें और लंबी विवरणों तथा 30+ लाइनों के साथ टेस्ट करें ताकि लेआउट टूटने न पाए।
इतिहास मत मिटाइए। प्रभावित टाइम एंट्रीज़ से इनवॉइस संदर्भ अनलिंक करें (invoice reference साफ करें), इनवॉइस लाइनों और टोटल्स को फिर से जनरेट करें, और एक छोटी सुधार नोट स्टोर करें ताकि बाद में समझा सकें कि क्या बदला गया था बिना ऑडिट ट्रेल खोए।
पहले मैनुअल टाइम एंट्री से शुरू करें क्योंकि यह बनाना तेज़ और सुधारना आसान होता है। टाइमर अतिरिक्त एज केस जोड़ता है (मिस्ड स्टॉप्स, एडिट्स, डिवाइस इश्यू) इसलिए उसे तब जोड़ें जब आपका कोर वर्कफ़्लो भरोसेमंद ढंग से सही इनवॉइस दे रहा हो।
कोर फ्लो पहले बनाएं: टाइम एंट्री कैप्चर, अप्रूवल/लॉकिंग, अनबिल्ड टाइम से इनवॉइस क्रिएशन, और PDF जेनरेशन। पहले टैक्स, मल्टी‑करेंसी, डिस्काउंट और अटैचमेंट को छोड़ दें क्योंकि वे एज‑केस रखते हैं जो आपके पहले रिलीज़ को धीमा कर देंगे और कैलकुलेशन को जटिल बनाएंगे।


