ملی ای‌پی‌آی

ترکیب هیئت‌مدیره در تاریخ قرارداد: چطور از تاریخچه پیدا کنیم

برای دانستن ترکیب هیئت‌مدیره در تاریخ قرارداد، ردیف‌هایی را نگه دارید که شروعشان پیش از آن تاریخ و پایانشان بعد از آن یا خالی است.

برای دانستن اینکه چه کسی در یک تاریخ مشخص مدیر شرکت بود، فهرست فعلی هیئت‌مدیره کافی نیست؛ باید ردیف‌هایی را نگه دارید که آن تاریخ بین شروع و پایانشان می‌افتد. این یک فیلتر ساده است، ولی چند تله دارد که تقریباً هر کسی یک بار در آن می‌افتد.

سناریو آشناست: قراردادی چند سال پیش امضا شده، حالا اختلافی پیش آمده و کسی می‌پرسد «امضاکننده آن روز اصلاً مدیرعامل بود؟» پاسخ را در تاریخچهٔ اعضای هیئت‌مدیره پیدا می‌کنید. در ادامه می‌گویم چطور.

ساختار داده: هر ردیف یک دوره است

هر ردیف تاریخچه یک نفر را در یک سمت و برای یک دوره نشان می‌دهد: نام، سمت، تاریخ شروع، مدت و تاریخ پایان. دو نکتهٔ مهم:

  • تاریخ پایان ممکن است خالی باشد. ردیفی که پایان ندارد، ترکیب فعلی است.
  • یک نفر می‌تواند چند ردیف داشته باشد، چون ممکن است در چند دوره انتخاب شده یا سمتش عوض شده باشد.

پس تاریخچه «فهرست آدم‌ها» نیست؛ «فهرست دوره‌ها»ست. همین تغییر نگاه نیمی از سردرگمی را برمی‌دارد.

فیلتر درست برای یک تاریخ

فرض کنید می‌خواهید ببینید در تاریخ مشخص T چه کسی در هیئت بود. ردیف‌هایی را نگه می‌دارید که:

  • تاریخ شروع‌شان ≤ T باشد، و
  • تاریخ پایانشان خالی باشد یا ≥ T.

در شبه‌کد:

js const at = (rows, T) => rows.filter((r) => r.start <= T && (r.end == null || r.end >= T));

ولی start و end در پاسخ رشته‌های تاریخ شمسی‌اند و مقایسهٔ رشته‌ای آن‌ها فقط وقتی درست است که قالبشان یکدست باشد: سال چهار رقم، ماه و روز دو رقم، همه با ارقام لاتین یا همه فارسی. قبل از مقایسه، تاریخ را به عدد (مثلاً ۱۴۰۲۰۷۱۵) تبدیل کنید و با همان عدد مقایسه کنید. این از اشتباه‌های ارقام فارسی و لاتین هم نجاتتان می‌دهد.

سه حالت لبه‌ای

روز تغییر. اگر قرارداد دقیقاً در روزی امضا شده که یک دوره تمام و دورهٔ بعد شروع شده، هر دو ردیف شرط شما را برآورده می‌کنند. این را خطا ندانید؛ فهرست هر دو را نشان دهید و بگذارید انسان تصمیم بگیرد. حقوقی‌ها دقیقاً همین ساعت‌ها را بررسی می‌کنند و ما از سطح تاریخ روز پایین‌تر نداریم.

ردیف بدون پایان در گذشتهٔ دور. ممکن است برای شرکتی قدیمی ردیفی بدون پایان در دوره‌ای باشد که منطقاً باید بسته شده باشد. داده‌ی ثبتی کامل نیست و خالی بودن پایان را باید همان‌گونه که هست گزارش کنید، نه حدس بزنید.

مدت با فاصلهٔ تاریخ نمی‌خواند. فیلد مدت یک رشتهٔ توصیفی است (مثل دو سال یا تا پایان سال مالی). اگر محاسبهٔ شما از شروع به‌اضافهٔ مدت، پایان را دربیاورد و با تاریخ پایان ردیف نخواند، به تاریخ پایانِ خودِ ردیف اعتماد کنید و مدت را فقط توصیفی بدانید.

ترتیب را خودتان تعیین کنید

ترتیب ردیف‌ها در پاسخ تضمین نشده است. پیش از هر نمایش، بر اساس تاریخ شروع و سپس سمت مرتب کنید. اگر تاریخچه را به‌صورت خط زمان نشان می‌دهید، دوره‌های هم‌زمان را در یک ستون زیر هم بگذارید تا ببینید در هر مقطع چه ترکیبی بوده.

یک خط زمان خوب سه ستون دارد: بازه، نفرات و تغییر نسبت به مقطع قبل. «تغییر نسبت به مقطع قبل» را شما محاسبه می‌کنید و همان چیزی است که خواننده را سریع به جواب می‌رساند.

چه چیزی را از تاریخچه نمی‌شود فهمید

تاریخچه علت جابه‌جایی را نمی‌گوید. استعفا، عزل، پایان دوره و فوت همه به شکل یک تاریخ پایان دیده می‌شوند. اگر دعوا بر سر چرایی تغییر است، به آگهی تغییرات و صورتجلسه‌ها باید مراجعه کنید.

تغییرات سهام و سهامدار هم در این سرویس نیست. و همچنین اینکه امضای آن مدیر، در آن روز برای آن قرارداد خاص مجاز بوده یا نه؛ اختیارات و محدودیت‌های اساسنامه جدا از فهرست سمت‌ها هستند.

یک نکتهٔ صادقانه هم لازم است: این داده نشان‌دهندهٔ آن چیزی است که در پایگاه ثبتی آمده. اگر تغییری دیر ثبت شده باشد، ممکن است ترکیب «واقعی» روزی از ترکیب «ثبت‌شده» همان روز جلو باشد. برای اختلاف حقوقی، فهرست فقط یک مدرک کمکی است و نه حکم.

سه کاربرد واقعی که ارزش دارد

  1. بازبینی قرارداد قدیمی. تاریخ امضا را بدهید، سمت‌ها را ببینید.
  2. کنترل پیش از خرید شرکت یا سهام. ببینید در سال‌های گذشته مدیرعامل چند بار عوض شده و هر دوره چقدر طول کشیده. (در مقالهٔ دیگری دربارهٔ ساختن سیگنال از این الگو نوشته‌ایم: ثبات مدیریتی شرکت.)
  3. مستندسازی برای ممیزی. نتیجهٔ استعلام را با تاریخ گرفتن آن ذخیره کنید تا بعداً نشان دهید چه چیزی را بررسی کرده‌اید.

چند نکته برای پیاده‌سازی

  • تاریخ ورودی کاربر را اعتبارسنجی کنید؛ تاریخی مثل ۳۱ مهر وجود ندارد، چون شش ماه دوم سال حداکثر سی روز دارند (جز اسفند در سال کبیسه).
  • اگر کاربر فقط سال یا ماه را می‌داند، بازه بدهید نه یک روز و همهٔ ردیف‌های همپوشان را نشان دهید.
  • پاسخ را کش نکنید مگر با تاریخ مشخص؛ تاریخچه ثابت‌تر از فهرست فعلی است ولی هنوز می‌تواند اصلاح یا تکمیل شود.
  • اگر پاسخ «اطلاعاتی نیست» بود، آن را به‌صورت یک نتیجهٔ معتبر نشان دهید.

یک مثال عددی

فرض کنید تاریخچه یک شرکت این سه ردیف را برای سمت مدیرعامل دارد:

نفرشروعپایان
نفر الف۱۳۹۷/۰۱/۰۱۱۳۹۹/۰۱/۰۱
نفر ب۱۳۹۹/۰۱/۰۱۱۴۰۱/۰۶/۱۵
نفر ج۱۴۰۱/۰۶/۱۵خالی

برای تاریخ ۱۴۰۰/۰۳/۱۰ فقط نفر ب شرط را برآورده می‌کند. برای ۱۳۹۹/۰۱/۰۱ هر دو ردیف الف و ب را می‌گیرید، چون روز تغییر در هر دو بازه می‌افتد. و برای هر تاریخی بعد از ۱۴۰۱/۰۶/۱۵، ردیف بدون پایان را می‌گیرید. همین سه مورد، تمام منطق شماست.

یک پیشنهاد کوچک: در رابط خروجی، نتیجه را در سه دسته نشان دهید. «قطعی» برای وقتی که دقیقاً یک ردیف می‌خواند، «مرزی» برای روز تغییر، و «نامشخص» برای وقتی هیچ ردیفی نمی‌خواند. نمایش ساده «نتیجه نداریم» کاربر را می‌فرستد دنبال خطا، در حالی که ممکن است فقط داده آن دوره را نداشته باشد.

اگر تاریخچه برای آن تاریخ خالی بود

دو دلیل دارد. یا شرکت در آن تاریخ هنوز ثبت نشده بود، یا دادهٔ آن دوره در تاریخچهٔ هیئت‌مدیره ثبت نشده است. این دو را از ظاهر پاسخ نمی‌شود فرق گذاشت. در گزارش بنویسید «در داده‌ی ثبتی برای این تاریخ ردیفی نبود» و ادعای بیشتری نکنید؛ برای قطعیت باید به آگهی تغییرات همان دوره مراجعه شود.

در یک نگاه

برای جواب‌دادن به «آن روز چه کسی مدیر بود» سه کار کنید: تاریخ‌ها را به عدد تبدیل کنید، شرط شروع و پایان را با پایان خالی درست بنویسید، و روز تغییر دوره را به انسان نشان دهید. تاریخچه این ابزار را می‌دهد؛ تفسیر حقوقی‌اش با شماست.

آخرین بازبینی: تیم تحریریه ملی ای‌پی‌آی

وب‌سرویس مرتبط با این راهنما

API تاریخچه هیئت‌مدیره

تغییرات هیئت‌مدیره در طول زمان.

مشاهده مشخصات فنی و تعرفه

راهنماهای مرتبط

پرسش و تجربه کاربران

اگر این راهنما جوابتان را نداد، همین‌جا بپرسید. پرسش‌ها را تیمملی ای‌پی‌آی پاسخ می‌دهد و هر نظر پیش از انتشار بررسی می‌شود.

هنوز پرسشی ثبت نشده، اولین نفر باشید.