| HLEDGER-WEB(1) | hledger User Manuals | HLEDGER-WEB(1) |
نام (NAME)
hledger-web - رابط کاربری وب و API برای hledger، برنامهای قدرتمند و کاربرپسند برای حسابداری متن ساده
خلاصه دستور (SYNOPSIS)
hledger-web [OPTS] [QUERY]
یا
hledger web [OPTS] [QUERY]
توضیحات (DESCRIPTION)
این راهنما برای رابط وب hledger نسخه 1.52 است. برای مفاهیم مشترک و فرمتهای فایل، به راهنمای hledger نیز مراجعه کنید.
برنامه hledger مجموعهای قدرتمند، کاربرپسند و چندسکویی از برنامهها برای ردیابی پول، زمان، یا هر کالای دیگر با استفاده از حسابداری دوبل و فرمت فایل ساده و قابل ویرایش است. برنامه hledger از ledger(1) الهام گرفته و تا حد زیادی با آن سازگار است، و همچنین تا حد زیادی با beancount(1) قابلیت تبدیل متقابل دارد.
دستور hledger-web یک برنامه تحت وب ساده برای مرور و افزودن تراکنشها است. این ابزار رابط کاربری بهتری نسبت به واسط خط فرمان (CLI) یا واسط متنی (TUI) برنامه hledger-ui فراهم میکند و موارد بیشتری را بهصورت همزمان نشان میدهد (حسابها، دفتر حساب جاری، نمودارهای تراز) و امکان ورود داده با آگاهی از تاریخچه، جستجوی تعاملی و نشانهگذاری را مهیا میسازد.
همچنین hledger-web به شما امکان میدهد دفتر روزنامه (journal) را با چندین کاربر یا حتی در وب عمومی به اشتراک بگذارید. هیچ سیستم کنترل دسترسی درونی وجود ندارد، بنابراین در صورت نیاز باید آن را پشت یک پراکسی وب مناسب قرار دهید. به عنوان یک محافظت کوچک در برابر از دست رفتن دادهها هنگام اجرای یک نمونه محافظتنشده، در هر ویرایش، یک نسخه پشتیبان شمارهگذاریشده (تنها) از فایل اصلی ژورنال ایجاد میکند.
مانند hledger، دادهها را از یک فایل ژورنال مشخصشده با متغیر محیطی LEDGER_FILE میخواند (و به آن اضافه میکند) (با مقدار پیشفرض $HOME/.hledger.journal)؛ یا میتوانید فایلها را با گزینههای -f تعیین کنید. همچنین میتواند فایلهای timeclock، فایلهای timedot، یا هر فایل CSV/SSV/TSV دارای فیلد تاریخ را بخواند. (برای جزئیات به hledger(1) -> Input مراجعه کنید.)
دستور hledger-web را میتوان در سه حالت اجرا کرد:
- حالت --serve-browse (حالت پیشفرض): برنامه رابط وب و JSON API را ارائه میدهد، در صورت امکان مرورگر پیشفرض شما را برای نمایش برنامه باز میکند، و پس از دو دقیقه عدم فعالیت (بدون دریافت درخواست و بدون هیچ پنجره باز مرورگری که آن را نمایش دهد) بهطور خودکار خارج میشود.
- --serve: برنامه فقط رابط وب و JSON API را ارائه میدهد.
- --serve-api: برنامه فقط JSON API را ارائه میدهد.
در تمامی حالتها، hledger-web به عنوان یک پردازه در پیشزمینه اجرا شده و لاگ درخواستها را در stdout ثبت میکند.
گزینهها (OPTIONS)
دستور hledger-web گزینههای زیر را ارائه میدهد:
-
Flags: --serve --server ارائه خدمات و ثبت لاگ درخواستها، بدون مرورگر یا خروج خودکار --serve-api مشابه --serve، اما فقط ارائهدهنده JSON web API، نه رابط کاربری وب --allow=view|add|edit تنظیم سطح دسترسی کاربر برای تغییر دادهها (پیشفرض: `add`). همچنین مقدار `sandstorm` را برای استفاده در آن پلتفرم میپذیرد (مجوزها را از هدر درخواست `X-Sandstorm-Permissions` میخواند). --cors=ORIGIN مجاز کردن درخواستهای cross-origin از مبدأ مشخصشده؛ تنظیم ORIGIN بر روی "*" به درخواستهای هر مبدأیی اجازه میدهد --host=IPADDR شنود روی این آدرس IP (پیشفرض: 127.0.0.1) --port=PORT شنود روی این درگاه TCP (پیشفرض: 5000) --socket=SOCKET شنود روی سوکت یونیکس ارائهشده بهجای آدرس IP و درگاه (فقط یونیکس؛ مستلزم --serve است) --base-url=BASEURL تنظیم URL پایه (پیشفرض: http://IPADDR:PORT) --test اجرای آزمایشهای hledger-web و خروج. آرگومانهای اجراکننده آزمون hspec میتوانند پس از -- بیایند، مانند: hledger-web --test --help
بهطور پیشفرض hledger-web تنها بر روی آدرس آیپی 127.0.0.1 شنود میکند که فقط از طریق رایانه محلی قابل دسترسی است.
برای مجاز کردن دسترسی از دیگر مبادی، از --host استفاده کنید تا یک آدرس با قابلیت دسترسی بیرونی که روی این سیستم پیکربندی شده است را مشخص کنید. آدرس ویژه 0.0.0.0 باعث میشود برنامه روی تمامی آدرسهای این ماشین شنود کند.
به همین ترتیب، میتوانید از --port برای شنود بر روی یک درگاه TCP غیر از ۵۰۰۰ استفاده نمایید. این گزینه زمانی مفید است که بخواهید چندین نمونه hledger-web را روی یک سیستم اجرا کنید.
هنگامی که از --socket استفاده میشود، hledger-web بهجای پورت TCP از طریق یک فایل سوکت ارتباط برقرار میسازد. این شیوه میتواند امنتر باشد، به مجوزهای فایل یونیکس احترام میگذارد، و موارد کاربرد خاصی مانند اجرای نمونههای مجزا برای هر کاربر پشت پراکسی معکوس nginx را سادهتر میکند. (برای مثال: proxy_pass http://unix:/tmp/hledger/${remote_user}.socket;.)
میتوانید از --base-url برای تغییر پروتکل، نام میزبان، درگاه و مسیری که در پیوندهای وب hledger-web نمایش داده میشوند استفاده نمایید. این امر برای نمونه هنگام ادغام hledger-web درون یک وبسایت بزرگتر کاربرد دارد. مقدار پیشفرض http://HOST:PORT/ با استفاده از آدرس میزبان و درگاه TCP پیکربندیشده سرور است (یا http://HOST در صورتی که درگاه ۸۰ باشد). توجه داشته باشید که این گزینه بر تولید URL اثر میگذارد اما تجزیه مسیرها (route parsing) را تغییر نمیدهد.
دستور hledger-web همچنین از بسیاری از گزینههای عمومی hledger پشتیبانی میکند:
-
General input/data transformation flags: -f --file=[FMT:]FILE خواندن دادهها از FILE، یا از stdin در صورتی که FILE برابر - باشد، با استنتاج فرمت از پسوند یا پیشوند FMT:. میتواند بیش از یکبار مشخص شود. در صورت عدم تعیین، از $LEDGER_FILE یا $HOME/.hledger.journal خوانده میشود. --rules=RULESFILE استفاده از قواعد تعریفشده در این فایل قوانین برای تبدیل فایلهای CSV/SSV/TSV بعدی. در صورت عدم تعیین، از FILE.csv.rules برای هر FILE.csv استفاده میکند. --alias=A=B|/RGX/=RPL تبدیل نام حسابها از A به B، یا با جایگزینی تطابقهای عبارات باقاعده --auto تولید ثبتهای اضافی با اعمال قواعد ثبت خودکار ("=") بر روی تمامی تراکنشها --forecast[=PERIOD] تولید تراکنشهای اضافی از قواعد دورهای ("~")، از پس از آخرین تراکنش عادی تا ۶ ماه آینده. یا در طول دوره (PERIOD) مشخصشده (علامت مساوی الزامی است). قواعد ثبت خودکار نیز بر این تراکنشها اعمال خواهد شد. در hledger-ui همچنین تراکنشهای آیندهدار را در هنگام راهاندازی نمایان میکند. -I --ignore-assertions بررسی نکردن اعتبارسنجی ترازها (balance assertions) بهطور پیشفرض --txn-balancing=... نحوه بررسی تراز بودن تراکنشها: 'old': استفاده از دقت نمایش عمومی 'exact': استفاده از دقت تراکنش (پیشفرض) --infer-costs استنتاج ثبتهای ارزش ویژه تبدیل از هزینهها --infer-equity استنتاج هزینهها از ثبتهای ارزش ویژه تبدیل --infer-market-prices استنتاج قیمتهای بازار از هزینهها --pivot=TAGNAME استفاده از یک فیلد یا برچسب متفاوت به عنوان نام حسابها -s --strict انجام بررسیهای خطای اضافی (و لغو -I) --verbose-tags افزودن برچسبهایی که دادههای تولیدشده/تغییریافته را نشان میدهند General output/reporting flags (supported by some commands): -b --begin=DATE شامل شدن ثبتها/تراکنشها در/پس از این تاریخ -e --end=DATE شامل شدن ثبتها/تراکنشها پیش از این تاریخ (همراه با بازه گزارش، با پایان زیردوره بعدی تنظیم خواهد شد) -D --daily گزارش چنددورهای با بازه ۱ روزه -W --weekly گزارش چنددورهای با بازه ۱ هفتهای -M --monthly گزارش چنددورهای با بازه ۱ ماهه -Q --quarterly گزارش چنددورهای با بازه ۱ فصل (سه ماهه) -Y --yearly گزارش چنددورهای با بازه ۱ ساله -p --period=PERIODEXP تنظیم تاریخ آغاز، تاریخ پایان، و/یا بازه گزارش با انعطافپذیری بیشتر --today=DATE بازنویسی تاریخ امروز (بر تاریخهای نسبی اثر میگذارد) --date2 تطابق/استفاده از تاریخهای ثانویه بهجای آن (منسوخشده) -U --unmarked شامل شدن تنها ثبتها/تراکنشهای بدون نشانهگذاری -P --pending شامل شدن تنها ثبتها/تراکنشهای در انتظار (pending) -C --cleared شامل شدن تنها ثبتها/تراکنشهای تسویهشده (cleared) (امکان ترکیب -U/-P/-C وجود دارد) -R --real شامل شدن تنها ثبتهای غیرمجازی -E --empty نمایش موارد صفر که بهطور معمول پنهان هستند. در hledger-ui و hledger-web برعکس عمل میکند. --depth=DEPTHEXP اگر عدد (یا NUM-) باشد: نمایش تنها NUM سطح نخست حسابها. اگر REGEXP=NUM باشد، محدودیت تنها بر حسابهای منطبق با عبارت باقاعده اعمال میشود. -B --cost نمایش مبالغ تبدیلشده به بهای تمامشده/مبلغ فروش آنها -V --market نمایش مبالغ تبدیلشده به ارزش آنها در پایان دوره(ها) در کالای سنجش پیشفرض ارزشگذاری آنها. معادل با --value=end. -X --exchange=COMM نمایش مبالغ تبدیلشده به ارزش آنها در پایان دوره(ها) در کالای مشخصشده. معادل با --value=end,COMM. --value=WHEN[,COMM] نمایش مبالغ تبدیلشده به ارزش آنها در تاریخ(های) مشخصشده در کالای پیشفرض ارزشگذاری یا یک کالای مشخص. WHEN میتواند موارد زیر باشد: 'then': ارزش در تاریخهای تراکنش 'end': ارزش در پایان دوره(ها) 'now': ارزش امروز YYYY-MM-DD: ارزش در تاریخ دادهشده -c --commodity-style=S بازنویسی شیوه نمایش یک کالا. مثال: -c '.' یا -c '1.000,00 EUR' --pretty[=YN] استفاده از نویسههای رسم کادر در خروجی متنی؟ میتواند 'y'/'yes' یا 'n'/'no' باشد. در صورت مشخص شدن YN، علامت مساوی الزامی است. General help flags: -h --help نمایش راهنمای خط فرمان --tldr نمایش مثالهای دستور با tldr --info نمایش راهنما با info --man نمایش راهنما با man --version نمایش اطلاعات نسخه --debug=[1-9] نمایش این میزان خروجی اشکالزدایی (پیشفرض: 1) --pager=YN استفاده از صفحهبند (pager) در صورت نیاز؟ y/yes (پیشفرض) یا n/no --color=YNA --colour استفاده از رنگهای ANSI؟ y/yes، n/no، یا auto (پیشفرض)
دستور hledger-web حسابهای با مانده صفر را بهطور پیشفرض نشان میدهد (مشابه hledger-ui و برعکس hledger). استفاده از گزینه -E/--empty این رفتار را معکوس میکند. اگر حسابهایی را مشاهده میکنید که به نظر مانده صفر دارند اما با -E پنهان نمیشوند، به این دلیل است که ماندهای با بهای تمامشده مختلط دارند که وقتی هزینهها پنهان باشند مانند صفر به نظر میرسد. (دستور hledger-web بهای تمامشده را نشان نمیدهد.)
گزینههای گزارشگیری و/یا آرگومانهای پرسوجو (query) را میتوان برای تنظیم یک پرسوجوی اولیه به کار برد که گرچه در رابط کاربری نمایش داده نمیشود، دادههای نمایشدادهشده را محدود میکند (علاوه بر هرگونه پرسوجوی جستجویی که در رابط کاربری وارد شود).
اگر از پوسته bash استفاده میکنید، میتوانید با فشردن کلید TAB در خط فرمان، گزینهها را بهطور خودکار تکمیل کنید. اگر این قابلیت کار نمیکند، به بخش Install > Shell completions مراجعه فرمایید.
مجوزها و سطوح دسترسی (PERMISSIONS)
بهطور پیشفرض، hledger-web به هر کسی که بتواند به آن دسترسی داشته باشد اجازه میدهد ژورنال را مشاهده کرده و تراکنشهای جدید بیفزاید، اما اجازه تغییر دادههای موجود را نمیدهد.
میتوانید افرادی را که به آن دسترسی دارند با روشهای زیر محدود کنید:
- تنظیم آدرس IP که برنامه بر روی آن شنود میکند (به --host در بالا مراجعه کنید). بهطور پیشفرض روی 127.0.0.1 شنود میکند که فقط برای کاربران رایانه محلی قابل دسترسی است.
- قرار دادن آن پشت یک پراکسی احراز هویت، مانند caddy یا apache
- قرار دادن آن پشت یک فایروال
و میتوانید کارهایی را که کاربران متصل میتوانند انجام دهند، با تعیین گزینه --allow=ACCESSLEVEL هنگام راهاندازی محدود کنید. مقدار ACCESSLEVEL یکی از موارد زیر است:
- view - اجازه مشاهده فایل(های) ژورنال را میدهد
- add - همچنین اجازه افزودن تراکنشهای جدید به فایل اصلی ژورنال را میدهد
- edit - همچنین اجازه ویرایش، بارگذاری یا بارگیری فایل(های) ژورنال را میدهد
- sandstorm - (برای برنامه Sandstorm مربوط به hledger-web:) بسته به اینکه کدامیک از موارد view، add یا edit در هدر HTTP به نام X-Sandstorm-Permissions تعیین شده باشند، دسترسی میدهد
سطح دسترسی پیشفرض برابر add است.
ویرایش، بارگذاری، بارگیری (EDITING, UPLOADING, DOWNLOADING)
اگر قابلیت manage ذکرشده در بالا را فعال کنید، یک دکمه جدید به شکل «آچار» در سمت راست فرم جستجو خواهید دید. کلیک روی این دکمه به شما امکان میدهد فایل ژورنال یا هر فایلی را که شامل میشود، ویرایش، بارگذاری یا بارگیری کنید.
توجه داشته باشید که برخلاف هر دستور دیگر hledger، در این حالت شما (یا هر بینندهای) میتوانید فایلهای داده را تغییر داده یا پاک کنید.
بهطور معمول هر زمان که یک فایل از این طریق تغییر میکند، hledger-web یک نسخه پشتیبان شمارهگذاریشده ذخیره میکند (با فرض اینکه مجوزهای فایل اجازه دهند، دیسک پر نباشد، و غیره). در حال حاضر hledger-web از سیستمهای کنترل نسخه آگاه نیست؛ اگر از یکی از آنها استفاده میکنید، باید ترتیبی دهید که تغییرات را خودتان ثبت (commit) کنید (مثلاً با یک cron job یا ناظر فایل مانند entr).
تغییراتی که فایل(های) ژورنال را غیرقابل تجزیه یا نامعتبر سازند (مثلاً با شکست خوردن بررسیهای تراز) مسدود میشوند. (احتمالاً؛ این مورد نیاز به بررسی مجدد دارد.)
بارگذاری مجدد (RELOADING)
دستور hledger-web تغییرات ایجادشده در فایلها با روشهای دیگر را (مثلاً اگر آن را مستقیماً خارج از hledger-web ویرایش کنید) تشخیص میدهد، و با بارگذاری مجدد صفحه یا رفتن به صفحهای جدید، دادههای تازه را نشان خواهد داد. اگر تغییری باعث غیرقابل تجزیه شدن فایل شود، hledger-web تا زمانی که فایل اصلاح شود یک پیام خطا نمایش میدهد.
(نکته: اگر فایلهای مانتشده از ماشین دیگری را مشاهده میکنید، اطمینان حاصل کنید که ساعتهای هر دو ماشین تقریباً با هم همگام باشند.)
رابط برنامهنویسی جیسان (JSON API)
علاوه بر رابط کاربری وب، hledger-web یک JSON API نیز ارائه میدهد که میتوان از آن برای دریافت دادهها یا افزودن تراکنشهای جدید استفاده کرد. اگر فقط JSON API را میخواهید، میتوانید از گزینه --serve-api استفاده کنید. مثال:
-
$ hledger-web -f examples/sample.journal --serve-api ...
میتوانید دادههای JSON را از این مسیرها دریافت کنید:
-
/version /accountnames /transactions /prices /commodities /accounts /accounttransactions/ACCOUNTNAME
برای مثال، تمام نامهای حسابها در ژورنال (مشابه دستور accounts). (جیسان hledger-web شامل خطوط جدید نیست؛ در اینجا از پایتون برای خواناتر کردن آن استفاده میکنیم):
-
$ curl -s http://127.0.0.1:5000/accountnames | python -m json.tool [ "assets", "assets:bank", "assets:bank:checking", "assets:bank:saving", "assets:cash", "expenses", "expenses:food", "expenses:supplies", "income", "income:gifts", "income:salary", "liabilities", "liabilities:debts" ]
یا تمام تراکنشها:
-
$ curl -s http://127.0.0.1:5000/transactions | python -m json.tool [ { "tcode": "", "tcomment": "", "tdate": "2008-01-01", "tdate2": null, "tdescription": "income", "tindex": 1, "tpostings": [ { "paccount": "assets:bank:checking", "pamount": [ { "acommodity": "$", "aismultiplier": false, "aprice": null, ...
بخش عمده JSON متناظر با انواع داده hledger است؛ برای جزئیات در مورد معنای فیلدها، به مستندات haddock مربوط به Hledger.Data.Json مراجعه کرده و روی انواع مختلف داده مانند Transaction کلیک کنید. و برای درک در سطحی بالاتر، مستندات ژورنال را ببینید. یک مشخصات پایه OpenAPI نیز وجود دارد.
در برخی موارد یک JSON بیرونی متناظر با نوع داده "Report" وجود دارد. برای درک آن، به haddock مربوط به Hledger.Web.Handler.MiscR مراجعه کرده و به کد منبع هندلر مربوطه نگاه کنید تا ببینید چه چیزی برمیگرداند. برای مثال در مورد /accounttransactions، این تابع getAccounttransactionsR است که یک "accountTransactionsReport ..." برمیگرداند. با بررسی haddock برای آن میبینیم که accounttransactions/ یک AccountTransactionsReport برمیگرداند که از یک عنوان گزارش و فهرستی از AccountTransactionsReportItem (و غیره) تشکیل شده است.
میتوانید با یک درخواست PUT به /add، تراکنش جدیدی به ژورنال اضافه کنید، به شرطی که hledger-web با قابلیت add راهاندازی شده باشد (که بهطور پیشفرض فعال است). بدنه داده (payload) باید نمایش JSON کامل و دقیق یک تراکنش hledger باشد (دادههای ناقص پذیرفته نمیشوند). میتوانید نمونه JSON را از /transactions یا /accounttransactions در hledger-web دریافت کنید، یا با hledger-lib صادر نمایید، به عنوان مثال:
-
.../hledger$ stack ghci hledger-lib >>> writeJsonFile "txn.json" (head $ jtxns samplejournal) >>> :q
در اینجا نمونه ساختار آن در نسخه hledger-1.17 آورده شده است (به یاد داشته باشید این JSON متناظر با Transaction و انواع داده مرتبط در hledger است):
-
{ "tcomment": "", "tpostings": [ { "pbalanceassertion": null, "pstatus": "Unmarked", "pamount": [ { "aprice": null, "acommodity": "$", "aquantity": { "floatingPoint": 1, "decimalPlaces": 10, "decimalMantissa": 10000000000 }, "aismultiplier": false, "astyle": { "ascommodityside": "L", "asdigitgroups": null, "ascommodityspaced": false, "asprecision": 2, "asdecimalpoint": "." } } ], "ptransaction_": "1", "paccount": "assets:bank:checking", "pdate": null, "ptype": "RegularPosting", "pcomment": "", "pdate2": null, "ptags": [], "poriginal": null }, { "pbalanceassertion": null, "pstatus": "Unmarked", "pamount": [ { "aprice": null, "acommodity": "$", "aquantity": { "floatingPoint": -1, "decimalPlaces": 10, "decimalMantissa": -10000000000 }, "aismultiplier": false, "astyle": { "ascommodityside": "L", "asdigitgroups": null, "ascommodityspaced": false, "asprecision": 2, "asdecimalpoint": "." } } ], "ptransaction_": "1", "paccount": "income:salary", "pdate": null, "ptype": "RegularPosting", "pcomment": "", "pdate2": null, "ptags": [], "poriginal": null } ], "ttags": [], "tsourcepos": { "tag": "JournalSourcePos", "contents": [ "", [ 1, 1 ] ] }, "tdate": "2008-01-01", "tcode": "", "tindex": 1, "tprecedingcomment": "", "tdate2": null, "tdescription": "income", "tstatus": "Unmarked" }
و در اینجا نحوه آزمایش افزودن آن با curl آمده است. این دستور باید ورودی جدیدی به ژورنال شما بیفزاید:
-
$ curl http://127.0.0.1:5000/add -X PUT -H 'Content-Type: application/json' --data-binary @txn.json
خروجی اشکالزدایی (DEBUG OUTPUT)
خروجی اشکالزدایی
میتوانید --debug[=N] را به خط فرمان اضافه کنید تا خروجی اشکالزدایی ثبت شود. مقدار N از ۱ (کمترین خروجی، پیشفرض) تا ۹ (بیشترین خروجی) است. بهطور معمول با ۱ شروع میکنید و آن را افزایش میدهید تا زمانی که خروجی کافی را مشاهده کنید. خروجی اشکالزدایی به stderr ارسال میشود و با درخواستهای ثبتشده در stdout آمیخته میگردد. برای ثبت خروجی اشکالزدایی در یک فایل لاگ بهجای ترمینال، معمولاً میتوانید stderr را هدایت کنید، به عنوان مثال:
hledger-web --debug=3 2>hledger-web.log.
محیط (ENVIRONMENT)
LEDGER_FILE فایل اصلی ژورنال برای استفاده در زمانی که با -f/--file مشخص نشده باشد. پیشفرض: $HOME/.hledger.journal.
اشکالات (BUGS)
ما از گزارشهای اشکال در سامانه رهگیری باگهای hledger (https://bugs.hledger.org)، یا در چت یا لیست پستی hledger (https://hledger.org/support) استقبال میکنیم.
برخی مسائل شناختهشده:
روی نمایشگرهای کوچک یا در مرورگرهای متنی به خوبی کار نمیکند.
نویسندگان (AUTHORS)
Simon Michael <simon@joyful.com> و
مشارکتکنندگان.
به پیوند
http://hledger.org/CREDITS.html
مراجعه
کنید.
حق نشر (COPYRIGHT)
حق نشر 2007-2023 متعلق به Simon Michael و مشارکتکنندگان است.
مجوز (LICENSE)
تحت مجوز GNU GPL نسخه ۳ یا بالاتر منتشر شده است.
همچنین ببینید (SEE ALSO)
hledger(1), hledger-ui(1), hledger-web(1), ledger(1)
| March 2026 | hledger-web-1.52 |