arelle におけるコンテキスト情報内の日付処理

XBRL インスタンスのコンテキスト情報に含まれる「時点(instance)」および「期間(duration)」は,それぞれ「決算日」および「開始日と終了日」を表す。これらは arelle 内で以下の形式で表現される(以下は「前年度連結決算の時点情報」の例)。

contexts = arelle.ModelXbrl.ModelXbrl.contexts
contexts['Prior1YearConsolidatedInstant'].instantDatetime

しかし,arelle の仕様では,「決算日(instantDatetime)」と「終了日(endDatetime)」を翌日に設定することになっており,arelle により取得した日付を調整する必要がある。

プログラム例

# -*- coding:utf-8 -*-

from arelle import ModelManager
from arelle import Cntlr
import arelle
import datetime

#arelle を用いて XBRL インスタンスを読み込む
cntlr = arelle.Cntlr.Cntlr()
modelManager = arelle.ModelManager.ModelManager(cntlr)
xbrl = arelle.ModelXbrl.load(modelManager, "jpfr-asr-E05179-000-2012-03-31-01-2012-07-02.xbrl")

#コンテキスト集合の取得
contexts = xbrl.contexts

#コンテキスト中の日付処理
#
#仕様によると,endDateTime, instant の日付は翌日になる(場合もある)らしく,
#これらの日付を1日前に戻す必要がある。
#http://arelle.org/wordpress/wp-content/uploads/downloads/2011/09/ComparabilityAndDataMiningUnifiedModel-Paper.pdf
keys = contexts.keys()
for key in keys:
    print key, " : ",

    oneday = datetime.timedelta(days=1)
    context = contexts[key]
    if context.startDatetime is not None:
        print "startDatetime : ", context.startDatetime
    if context.endDatetime is not None:
        print "endDatetime : ", context.endDatetime - oneday
    if context.instantDatetime is not None:
        print "instantDatetime : ", context.instantDatetime - oneday

実行結果

CurrentYearNonConsolidatedDuration  :  startDatetime :  2011-09-01 00:00:00
endDatetime :  2012-03-31 00:00:00
Prior1YearConsolidatedInstant  :  endDatetime :  2011-08-31 00:00:00
instantDatetime :  2011-08-31 00:00:00
CurrentYearConsolidatedInstant  :  endDatetime :  2012-03-31 00:00:00
instantDatetime :  2012-03-31 00:00:00
Prior2YearConsolidatedInstant  :  endDatetime :  2010-08-31 00:00:00
instantDatetime :  2010-08-31 00:00:00
Prior2YearNonConsolidatedInstant  :  endDatetime :  2010-08-31 00:00:00
instantDatetime :  2010-08-31 00:00:00
Prior1YearNonConsolidatedInstant  :  endDatetime :  2011-08-31 00:00:00
instantDatetime :  2011-08-31 00:00:00
CurrentYearNonConsolidatedInstant  :  endDatetime :  2012-03-31 00:00:00
instantDatetime :  2012-03-31 00:00:00
Prior1YearNonConsolidatedDuration  :  startDatetime :  2010-09-01 00:00:00
endDatetime :  2011-08-31 00:00:00
DocumentInfo  :  endDatetime :  2012-07-02 00:00:00
instantDatetime :  2012-07-02 00:00:00
Prior1YearConsolidatedDuration  :  startDatetime :  2010-09-01 00:00:00
endDatetime :  2011-08-31 00:00:00
CurrentYearConsolidatedDuration  :  startDatetime :  2011-09-01 00:00:00
endDatetime :  2012-03-31 00:00:00

参考文献

instantDatetime および endDatetime の扱いは以下の文書に記述されている:
http://arelle.org/wordpress/wp-content/uploads/downloads/2011/09/ComparabilityAndDataMiningUnifiedModel-Paper.pdf