適格請求書発行事業者Web-API: 登録番号から名称を検索 (Qualified Invoice Issuer Web-API: Search Name with ID)
登録番号から、適格請求書発行事業者の名称、所在地、更新履歴等を取得します。国税庁の適格請求書発行事業者公表システム Web-API にアクセスします。あらかじめ国税庁から「アプリケーションID」の発行を受けておく必要があります。
Configs
  • C1:適格請求書発行事業者 Web-API のアプリケーションIDを入力してください *#{EL}
  • C2:”T”+13桁の登録番号を入力してください *#{EL}
  • C3:最終更新年月日が入力される日付型項目を選んでください
  • C4:氏名又は名称が入力される文字型項目を選んでください
  • C5:氏名又は名称の日本語(カナ)が入力される文字型項目を選んでください
  • C6:登録年月日が入力される日付型(年月日)項目を選んでください
  • C7:更新年月日が入力される日付型(年月日)項目を選んでください
  • C8:最新の事業者処理区分が入力される文字型項目を選んでください
  • C9:最新の人格区分が入力される文字型項目を選んでください
  • C10:最新の国内外区分が入力される文字型項目を選んでください
  • C11:本店又は主たる事務所の所在地が入力される文字型項目を選んでください
  • C12:主たる屋号(個人)が入力される文字型項目を選んでください
  • C13:通称・旧姓(個人)が入力される文字型項目を選んでください
  • C14:変更履歴(TSV)が入力される複数行文字型項目を選んでください
  • C15:詳細URLが入力される文字型項目を選んでください
Script (click to open)
// GraalJS Script (engine type: 2)
main();

function main(){

    const applicationId = configs.get('conf_applicationId');
    const conf_registratedNumber = configs.get('conf_registratedNumber');
    const registratedNumber = checkRegistratedNumber(conf_registratedNumber);

    if(registratedNumber === null){
      throw '登録番号が適切ではありません。(' + conf_registratedNumber + ')';
    }

    const issuer = searchIssuer(applicationId, registratedNumber);
    setIssuerData(issuer);

}

/*
@param {string} 適格請求書発行事業者の登録番号
@return {string} Registrated Number
- 入力された登録番号が "T" + 13 桁の数字で構成されるかどうかをチェックする。
- 登録番号が "T" で始まらない場合、先頭に "T" を付与してからチェックする。
*/
function checkRegistratedNumber(number){

    //number が T で始まらない場合、先頭に T を付与
    if( ! number.startsWith('T') ){
        number = 'T' + number;
    }
    if( ! new RegExp('^T[0-9]{13}$').test(number) ){
      return null;
    }else{
      return number;
    }

}


/*
- 適格請求書発行事業者の情報をプロセスデータにセット。
- Sets information of qualified invoice issuer to process data.
@param {object} 適格請求書発行事業者JSON / qualified invoice issuer JSON
@return {void}
*/
function setIssuerData(issuer){

    const PROCESS_ARR = {"01":"新規", "02":"公表内容の変更", "03":"登録の失効", "04":"登録の取消", "99":"削除"};
    const KIND_ARR = {"1":"個人", "2":"法人"};
    const COUNTRY_ARR = {"1":"国内事業者", "2":"特定国外事業者", "3":"特定国外事業者以外の国外事業者"};
    const LATEST_ARR = {"0":"過去情報", "1":"最新情報"};
    const historyArr = [];

    const conf_lastUpdateDate = configs.get('conf_lastUpdateDate');
    if(conf_lastUpdateDate !== ''){
        engine.setDataByNumber(conf_lastUpdateDate, java.sql.Date.valueOf(issuer.lastUpdateDate));
    }

    for( let i = 0 ; i < issuer.count ; i++){

        const announcement = issuer.announcement[i];
        const addressInfo = getAddressInfo(announcement);

        let historyText = announcement.sequenceNumber + '\t';
        historyText += announcement.name + '\t';
        historyText += announcement.kana + '\t';
        historyText += PROCESS_ARR[announcement.process] + '\t';
        historyText += announcement.registrationDate  + '\t';
        historyText += announcement.updateDate  + '\t';
        historyText += announcement.disposalDate  + '\t';
        historyText += announcement.expireDate  + '\t';
        historyText += KIND_ARR[announcement.kind] + '\t';
        historyText += COUNTRY_ARR[announcement.country] + '\t';
        historyText += addressInfo[0] + '\t';
        historyText += LATEST_ARR[announcement.latest] + '\t';
        historyText += announcement.tradeName + '\t';
        historyText += announcement.popularName_previousName;

        historyArr.push(historyText);

        //最新履歴の場合
        if(announcement.latest === '1'){
            const conf_name = configs.get('conf_name');
            if(conf_name !== ''){
                engine.setDataByNumber(conf_name, announcement.name);
            }
            const conf_kana = configs.get('conf_kana');
            if(conf_kana !== ''){
                engine.setDataByNumber(conf_kana, announcement.kana);
            }
            const conf_registrationDate = configs.get('conf_registrationDate');
            if(conf_registrationDate !== ''){
                engine.setDataByNumber(conf_registrationDate, java.sql.Date.valueOf(announcement.registrationDate));
            }
            const conf_updateDate = configs.get('conf_updateDate');
            if(conf_updateDate !== ''){
                engine.setDataByNumber(conf_updateDate, java.sql.Date.valueOf(announcement.updateDate));
            }
            const conf_process = configs.get('conf_process');
            if(conf_process !== ''){
                engine.setDataByNumber(conf_process, PROCESS_ARR[announcement.process]);
            }
            const conf_kind = configs.get('conf_kind');
            if(conf_kind !== ''){
                engine.setDataByNumber(conf_kind, KIND_ARR[announcement.kind]);
            }
            const conf_country = configs.get('conf_country');
            if(conf_country !== ''){
                engine.setDataByNumber(conf_country, COUNTRY_ARR[announcement.country]);
            }
            const conf_address = configs.get('conf_address');
            if(conf_address !== ''){
                engine.setDataByNumber(conf_address, addressInfo[0]);
            }
            const conf_tradeName = configs.get('conf_tradeName');
            if(conf_tradeName !== ''){
                engine.setDataByNumber(conf_tradeName, announcement.tradeName);
            }
            const conf_popularName = configs.get('conf_popularName');
            if(conf_popularName !== ''){
                engine.setDataByNumber(conf_popularName, announcement.popularName_previousName);
            }
            const conf_url = configs.get('conf_url');
            if(conf_url !== ''){
                engine.setDataByNumber(conf_url, 'https://www.invoice-kohyo.nta.go.jp/regno-search/detail?selRegNo=' + announcement.registratedNumber.substring(1));
            }

        }

    }

    const conf_history = configs.get('conf_history');
    if(conf_history !== '' && historyArr.length > 0){
        engine.setDataByNumber(conf_history, historyArr.join('\n'));
    }

}

/*
- 人格区分、国内外区分から住所情報を取得します。
- Gets address information from corporate/individual category and country category.
@param {object} 適格請求書発行事業者JSONの要素 Announcement / the element 'Announcement' of qualified invoice issuer JSON
@return {string array} 住所情報 / address information
*/
function getAddressInfo(announcement){

    const kind = announcement.kind;
    const country = announcement.country;
    let address, addressPrefectureCode, addressCityCode;

    //国内事業者
    if(country === '1'){

        //法人("人格を持たない社団等" を除く)
        if(kind === '2' && announcement.address !== ''){
            address = announcement.address;
            addressPrefectureCode = announcement.addressPrefectureCode;
            addressCityCode = announcement.addressCityCode;

        //個人 又は 法人("人格を持たない社団等")は公表住所(addressRequest)を持つ場合がある
        }else{
            address = announcement.addressRequest;
            addressPrefectureCode = announcement.addressRequestPrefectureCode;
            addressCityCode = announcement.addressRequestCityCode;
        }

    //特定国外事業者
    }else if(country === '2'){

        //自国の住所(address)
        address = announcement.address;
        addressPrefectureCode = announcement.addressPrefectureCode;
        addressCityCode = announcement.addressCityCode;

    //特定国外事業者以外の国外事業者
    }else if(country === '3'){

        //日本国内の住所(addressInside)
        address = announcement.addressInside;
        addressPrefectureCode = announcement.addressInsidePrefectureCode;
        addressCityCode = announcement.addressInsideCityCode;

        //個人で、さらに公表住所(addressRequest)を持つ場合、/(slash) を付けて追加
        if(kind === '1' && announcement.addressRequest !== ''){
            address += '/' + announcement.addressRequest;
            addressPrefectureCode += '/' + announcement.addressRequestPrefectureCode;
            addressCityCode += '/' + announcement.addressRequestCityCode;

        //法人
        }else if(kind === '2'){

            //さらに自国の住所(address)を持つ場合、/(slash) を付けて追加
            if(announcement.address !== ''){

                address += '/' + announcement.address;
                addressPrefectureCode += '/' + announcement.addressPrefectureCode;
                addressCityCode += '/' + announcement.addressCityCode;

            //さらに公表住所(addressRequest)を持つ場合、/(slash) を付けて追加 (人格のない法人の場合、ありえるとして想定)
            }else if(announcement.addressRequest !== ''){
                address += '/' + announcement.addressRequest;
                addressPrefectureCode += '/' + announcement.addressRequestPrefectureCode;
                addressCityCode += '/' + announcement.addressRequestCityCode;
            }

        }

    }

    return [address, addressPrefectureCode, addressCityCode];

}

/*
- 登録番号で適格請求書発行事業者情報を検索。国税庁の適格請求書発行事業者公表システム Web-API にアクセス。
- Searches the qualified invoice issuer information with the registrated Number, accessing to the Qualified Invoice Issuer System Web-API by National Tax Agency Japan.
@param {string} Web-API のアプリケーションID / application ID for Web-API
@param {string} 登録番号 / registrated number
@return {object} 適格請求書発行事業者オブジェクト(JSON) / qualified invoice issuer object(JSON)
*/
function searchIssuer(applicationId, registratedNumber){

    let request = httpClient.begin();
    request = request.queryParam('id', applicationId);
    request = request.queryParam('number',registratedNumber);
    request = request.queryParam('type','21'); // 21: 応答形式 = JSON形式
    request = request.queryParam('history','1'); // 1: 履歴情報あり
    const response = request.get('https://web-api.invoice-kohyo.nta.go.jp/1/num');
    //const response = request.get('https://kensyo.invoice-kohyo.nta.go.jp/1/num');

    const httpStatus = response.getStatusCode();
    const responseStr = response.getResponseAsString();
    engine.log("HTTP Status: " + String(httpStatus));
    engine.log(responseStr);

    if(httpStatus!==200){
        throw "HTTP Status was not 200.";
    }

    const issuer = JSON.parse(responseStr);
    engine.log(issuer.count + " histories.");

    if(issuer.count === '0'){
        throw "No Issuer with '" + registratedNumber + "' was found.";
    }

    return issuer;

}
/*
- Note
    - Change history TSV format is bellow.
        - sequence number, name, kana, process category, registration date, update date, disposal date, expire date, sole proprietor/corporation category, country category, address, latest, trade name, popular name or previous name
    - candidate value for item
        - process category: "新規"(new) "公表内容の変更"(update) "登録の失効"(expire) "登録の取消"(disposal) "削除"(delete)
        - sole proprietor/corporation category: "個人"(sole proprietor) "法人"(corporation)
        - country category: "国内事業者"(Japanese business operator) "特定国外事業者"(non Japanese business operator which has no office in Japan) "特定国外事業者以外の国外事業者" (non Japanese business operator which has office in Japan)
        - latest: "過去情報"(past information) "最新情報"(current information)
- Note(ja)
    - 履歴(TSV)のフォーマットは次の通りです。
        - 一連番号, 氏名又は名称、氏名又は名称の日本語(カナ), 事業者処理区分, 登録年月日, 更新年月日, 取消年月日, 失効年月日, 人格区分, 国内外区分, 本店又は主たる事務所の所在地, 最新履歴, 主たる屋号, 通称・旧姓
    - 検索結果がゼロ件の場合、この自動処理工程はエラー終了します。
    - 国内外区分が "特定国外事業者" の事業者は "本店又は主たる事務所の所在地" を持ちません。
    - 人格区分が "個人" の事業者は、希望する場合のみ次の項目が公表されます。
        - "主たる屋号" "主たる事務所の所在地" "通称・旧姓"
        - ("通称・旧姓" は「氏名の代わりに」または「氏名と併記して」公表されます)
    - 人格区分が "法人" の事業者のうち、人格のない社団等は、希望する場合のみ次の項目が公表されます。
        - "本店又は主たる事務所の所在地"
    - 項目の取り得る値
        - 事業者処理区分: "新規" "公表内容の変更" "登録の失効" "登録の取消" "削除"
        - 人格区分: "個人" "法人"
        - 国内外区分: "国内事業者" "特定国外事業者" "特定国外事業者以外の国外事業者"
        - 最新履歴: "過去情報" "最新情報"
    - 国税庁適格請求書発行事業者公表システム Web-API 機能を利用して取得した情報をもとに作成しています。
        - Addon の内容は国税庁によって保証されたものではありません。
*/

Download

2022-12-03 (C) Questetra, Inc. (MIT License)
https://support.questetra.com/ja/addons/qualified-invoice-issuer-web-api-search-name-with-id/
Addonファイルのインポートは Professional でのみご利用いただけます
自由改変可能な JavaScript (ECMAScript) コードです。いかなる保証もありません。

Notes

  • 履歴(TSV)のフォーマットは次の通りです。
    • 一連番号, 氏名又は名称、氏名又は名称の日本語(カナ), 事業者処理区分, 登録年月日, 更新年月日, 取消年月日, 失効年月日, 人格区分, 国内外区分, 本店又は主たる事務所の所在地, 最新履歴, 主たる屋号, 通称・旧姓
  • 検索結果がゼロ件の場合、この自動処理工程はエラー終了します。
  • 国内外区分が “特定国外事業者” の事業者は “本店又は主たる事務所の所在地” を持ちません。
  • 人格区分が “個人” の事業者は、希望する場合のみ次の項目が公表されます。
    • “主たる屋号” “主たる事務所の所在地” “通称・旧姓”
    • (“通称・旧姓” は「氏名の代わりに」または「氏名と併記して」公表されます)
  • 人格区分が “法人” の事業者のうち、人格のない社団等は、希望する場合のみ次の項目が公表されます。
    • “本店又は主たる事務所の所在地”
  • 項目の取り得る値
    • 事業者処理区分: “新規” “公表内容の変更” “登録の失効” “登録の取消” “削除”
    • 人格区分: “個人” “法人”
    • 国内外区分: “国内事業者” “特定国外事業者” “特定国外事業者以外の国外事業者”
    • 最新履歴: “過去情報” “最新情報”
  • 国税庁適格請求書発行事業者公表システム Web-API 機能を利用して取得した情報をもとに作成しています。
    • Addon の内容は国税庁によって保証されたものではありません。

Capture

See also

%d人のブロガーが「いいね」をつけました。