/*************************************
*                                    *
*    外枠システム  fout.c            *
*  （結果ファイル出力）              *
*                                    *
*************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "set.h"
#include "cntl.h"
#include "kyos.h"
#include "file_open.h"



void fout(void) {

    char    filename[250]    ; 
    int     ii ;
    int     bunrui ; 
    double  nenrei_kei_ninzu[62][ENDY-STARTY+1][5] ; 
    double  nenrei_betu_ninzu[121] ; 
    int     XEND ;


  for ( bunrui=0; bunrui<=52; bunrui++ ) {

      sprintf(filename, "/rev26/wakuc/rslt/ver_5/rslt%04d/waku%04d-%02d.csv", BANGO, BANGO, bunrui ) ;
      if ((fp_wakuout = fopen(filename, "w")) == NULL) {
           fprintf(stderr, "出力wakuファイルを開けません!\n");
           exit (2); 
      }


      fprintf(fp_wakuout , "試算番号,BANGO=,%d\n", BANGO );
      fprintf(fp_wakuout , "分類,性,年度,計," );
      for ( ii=15; ii<=99; ii++ ) {
        fprintf(fp_wakuout , "%02d," , ii );
      }
      fprintf(fp_wakuout , "100\n" );


      for ( sei=0; sei<=4; sei++ ) {
        for ( nendo=STARTY+1 ; nendo<=(int)min(KF,ENDY) ; nendo++ ) {

          nenrei_kei_ninzu[bunrui][nendo-STARTY][sei] = 0.0 ;
          for ( nenrei=15; nenrei<=120; nenrei++ ) {
            nenrei_betu_ninzu[nenrei] = 0.0 ;
            switch ( bunrui ) {
              case 0: /* 公的年金被保険者合計 */
                nenrei_betu_ninzu[nenrei] = ichigou[nendo-STARTY][sei][nenrei]
                    + nigou[nendo-STARTY][sei][nenrei] + sangou[nendo-STARTY][sei][nenrei] ;
                if ( nendo >= PARTYR1 ) {
                    nenrei_betu_ninzu[nenrei] += partnin[nendo-STARTY][sei][nenrei][0][0]  ;
                }
                else if ( nendo == PARTJJ ) {
                  nenrei_betu_ninzu[nenrei] = ichigou[PARTJJ-STARTY][sei][nenrei]
                      + nigou[PARTYR2-1-STARTY][sei][nenrei] + sangou[PARTJJ-STARTY][sei][nenrei]
                      + partnin[PARTYR2-1-STARTY][sei][nenrei][0][2] ;
                }

                  XEND = xend[8][nendo-STARTY] ; 
                  if ( nendo == PARTJJ ) { XEND = xend[8][PARTYR2-1-STARTY] ; }
                  if ( XEND < 60 ) { XEND = 60; }
                  if ( ( MODE == 4 ) && ( nenrei >= XEND ) ) {
                      nenrei_betu_ninzu[nenrei] = ichigouni[nendo-STARTY][sei][nenrei]
                                                  + nigou[nendo-STARTY][sei][nenrei] ;
                  }
                break ;
              case 1: /* 厚年１，２種（旧共済含む） */
                nenrei_betu_ninzu[nenrei] = kou12syu[nendo-STARTY][sei][nenrei] ;
                if ( nendo==PARTJJ ) { nenrei_betu_ninzu[nenrei] = kou12syu[PARTYR2-1-STARTY][sei][nenrei] ; }
                break ;
              case 2: /* 厚年３種 */
                nenrei_betu_ninzu[nenrei] = kou3syu[nendo-STARTY][sei][nenrei] ;
                if ( nendo==PARTJJ ) { nenrei_betu_ninzu[nenrei] = kou3syu[PARTYR2-1-STARTY][sei][nenrei] ; }
                break ;
              case 3: /* 国共 */
                nenrei_betu_ninzu[nenrei] = kyosai[1][nendo-STARTY][sei][nenrei] ;
                if ( nendo==PARTJJ ) { nenrei_betu_ninzu[nenrei] = kyosai[1][PARTYR2-1-STARTY][sei][nenrei] ; }
                break ;
              case 4: /* 地共 */
                nenrei_betu_ninzu[nenrei] = kyosai[2][nendo-STARTY][sei][nenrei] ;
                if ( nendo==PARTJJ ) { nenrei_betu_ninzu[nenrei] = kyosai[2][PARTYR2-1-STARTY][sei][nenrei] ; }
                break ;
              case 5: /* 私学 */
                nenrei_betu_ninzu[nenrei] = kyosai[3][nendo-STARTY][sei][nenrei] ;
                if ( nendo==PARTJJ ) { nenrei_betu_ninzu[nenrei] = kyosai[3][PARTYR2-1-STARTY][sei][nenrei] ; }
                break ;
              case 6: /* ＪＲ */
                nenrei_betu_ninzu[nenrei] = kyosai[4][nendo-STARTY][sei][nenrei] ;
                if ( nendo==PARTJJ ) { nenrei_betu_ninzu[nenrei] = kyosai[4][PARTYR2-1-STARTY][sei][nenrei] ; }
                break ;
              case 7: /* ＪＴ */
                nenrei_betu_ninzu[nenrei] = kyosai[5][nendo-STARTY][sei][nenrei] ;
                if ( nendo==PARTJJ ) { nenrei_betu_ninzu[nenrei] = kyosai[5][PARTYR2-1-STARTY][sei][nenrei] ; }
                break ;
              case 8: /* 農林 */
                nenrei_betu_ninzu[nenrei] = kyosai[7][nendo-STARTY][sei][nenrei] ;
                if ( nendo==PARTJJ ) { nenrei_betu_ninzu[nenrei] = kyosai[7][PARTYR2-1-STARTY][sei][nenrei] ; }
                break ;
              case 9: /* ＮＴＴ */
                nenrei_betu_ninzu[nenrei] = kyosai[6][nendo-STARTY][sei][nenrei] ;
                if ( nendo==PARTJJ ) { nenrei_betu_ninzu[nenrei] = kyosai[6][PARTYR2-1-STARTY][sei][nenrei] ; }
                break ;
              case 10: /* 国年１号（一般＋任意） */
                nenrei_betu_ninzu[nenrei] = ichigou[nendo-STARTY][sei][nenrei] ;
                break ;
              case 11: /* 厚年１，２種３号 */
                nenrei_betu_ninzu[nenrei] = kou12syu3[nendo-STARTY][sei][nenrei] ;
                break ;
              case 12: /* 厚年３種３号 */
                nenrei_betu_ninzu[nenrei] = kou3syu3[nendo-STARTY][sei][nenrei] ;
                break ;
              case 13: /* 国共３号 */
                nenrei_betu_ninzu[nenrei] = kyosai3[1][nendo-STARTY][sei][nenrei] ;
                break ;
              case 14: /* 地共３号 */
                nenrei_betu_ninzu[nenrei] = kyosai3[2][nendo-STARTY][sei][nenrei] ;
                break ;
              case 15: /* 私学３号 */
                nenrei_betu_ninzu[nenrei] = kyosai3[3][nendo-STARTY][sei][nenrei] ;
                break ;
              case 16: /* ＪＲ３号 */
                nenrei_betu_ninzu[nenrei] = kyosai3[4][nendo-STARTY][sei][nenrei] ;
                break ;
              case 17: /* ＪＴ３号 */
                nenrei_betu_ninzu[nenrei] = kyosai3[5][nendo-STARTY][sei][nenrei] ;
                break ;
              case 18: /* 農林３号 */
                nenrei_betu_ninzu[nenrei] = kyosai3[7][nendo-STARTY][sei][nenrei] ;
                break ;
              case 19: /* ＮＴＴ３号 */
                nenrei_betu_ninzu[nenrei] = kyosai3[6][nendo-STARTY][sei][nenrei] ;
                break ;
              case 20: /* ３号全体 */
                nenrei_betu_ninzu[nenrei] = sangou[nendo-STARTY][sei][nenrei] ;
                break ;
              case 21: 
                nenrei_betu_ninzu[nenrei] = 0.0 ;
                break ;
              case 22: /* ２号全体（厚年70歳以上は除く） */
                nenrei_betu_ninzu[nenrei] = kounen[nendo-STARTY][sei][nenrei] ;
                for ( seido=1; seido<=3; seido++ ) { 
                  nenrei_betu_ninzu[nenrei] += kyosai[seido][nendo-STARTY][sei][nenrei] ;
                }
                if ( nendo <= 2001 ) { 
                  nenrei_betu_ninzu[nenrei] += kyosai[7][nendo-STARTY][sei][nenrei] ;
                }
                if ( nendo >= PARTYR1 ) {
                  nenrei_betu_ninzu[nenrei] += partnin[nendo-STARTY][sei][nenrei][0][0] ;
                }
                if ( nenrei >= 70 ) {
                  nenrei_betu_ninzu[nenrei] -= qkounen[nendo-STARTY][sei][nenrei] ;
                }
                if ( nendo==PARTJJ ) {
                  nenrei_betu_ninzu[nenrei] = kounen[PARTYR2-1-STARTY][sei][nenrei] 
                     + partnin[PARTYR2-1-STARTY][sei][nenrei][0][2] ;
                  for ( seido=1; seido<=3; seido++ ) { 
                    nenrei_betu_ninzu[nenrei] += kyosai[seido][PARTYR2-1-STARTY][sei][nenrei] ;
                  }
                  if ( nenrei >= 70 ) {
                    nenrei_betu_ninzu[nenrei] -= qkounen[PARTYR2-1-STARTY][sei][nenrei] ;
                  }
                }
                break ;
              case 23: /* 国年２号被保険者（65歳未満の２号、パート込み） */
                if (( nenrei >= 15 ) && ( nenrei < 65 )) {
                  nenrei_betu_ninzu[nenrei] = qkounen[nendo-STARTY][sei][nenrei] ;
                  for ( seido=1; seido<=7; seido++ ) {
                    nenrei_betu_ninzu[nenrei] += kyosai[seido][nendo-STARTY][sei][nenrei] ;
                  }
                  nenrei_betu_ninzu[nenrei] += partnin[nendo-STARTY][sei][nenrei][0][0] ;
                  if ( nendo==PARTJJ ) {
                    nenrei_betu_ninzu[nenrei] = qkounen[PARTYR2-1-STARTY][sei][nenrei] ;
                    for ( seido=1; seido<=7; seido++ ) {
                      nenrei_betu_ninzu[nenrei] += kyosai[seido][PARTYR2-1-STARTY][sei][nenrei] ;
                    }
                    nenrei_betu_ninzu[nenrei] += partnin[PARTYR2-1-STARTY][sei][nenrei][0][2] ;
                  }
                }
                else {
                  nenrei_betu_ninzu[nenrei] = 0.0 ;
                }
                break ;
              case 24: /* 厚年70歳以上再掲用 */
                if (( nenrei >= 70 ) && ( nendo>=2007 )) { /* nendo>=2007 は70歳以上在老の導入後 */
                  nenrei_betu_ninzu[nenrei] = kou12syu[nendo-STARTY][sei][nenrei] + kou3syu[nendo-STARTY][sei][nenrei] ;
                }
                else if ( ( nenrei >= 70 ) && ( nendo==PARTJJ )) {
                  nenrei_betu_ninzu[nenrei] = kou12syu[PARTYR2-1-STARTY][sei][nenrei]
                     + kou3syu[PARTYR2-1-STARTY][sei][nenrei] ;
                }
                else {
                  nenrei_betu_ninzu[nenrei] = 0.0 ;
                }
                break ;
              case 25: /* 厚年１，２種69歳以下再掲用（パート込み） */
                if (( nenrei < 70 ) || ( nendo < 2007 )) { 
                  nenrei_betu_ninzu[nenrei] = kou12syu[nendo-STARTY][sei][nenrei] ;
                  if ( nendo >= PARTYR1 ) {
                    nenrei_betu_ninzu[nenrei] += partnin[nendo-STARTY][sei][nenrei][0][0]  ;
                  }
                  if ( ( nendo==PARTJJ ) && ( nenrei < 70 ) ) {
                    nenrei_betu_ninzu[nenrei] = kou12syu[PARTYR2-1-STARTY][sei][nenrei]
                       + partnin[PARTYR2-1-STARTY][sei][nenrei][0][2] ;
                  }
                }
                else {
                  nenrei_betu_ninzu[nenrei] = 0.0 ;
                }
                break ;
              case 26: /* 人口[年度央] */
                nenrei_betu_ninzu[nenrei] = jinko_c[nendo-STARTY][sei][nenrei] ;
                break ;
              case 27: /* 人口[年度末] */
                nenrei_betu_ninzu[nenrei] = jinko_m[nendo-STARTY][sei][nenrei] ;
                break ;
              case 28: /* 年央人口を０歳から、85歳以上一括 */
                nenrei_betu_ninzu[nenrei] = jinko_c[nendo-STARTY][sei][nenrei-15] ;
                break ;
              case 29: /* 年度末人口を０歳から、85歳以上一括 */
                nenrei_betu_ninzu[nenrei] = jinko_m[nendo-STARTY][sei][nenrei-15] ;
                break ;
              case 30: /* 厚年基金加入者 */
                nenrei_betu_ninzu[nenrei] = kikin[nendo-STARTY][sei][nenrei] ;
                break ;
              case 31: /* 厚年パート適用対象者 */
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][0][0] ;
                if ( nendo==PARTJJ ) { nenrei_betu_ninzu[nenrei] = partnin[PARTYR2-1-STARTY][sei][nenrei][0][2] ; }
                break ;
              case 32: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][0][1] ;
                break ;
              case 33: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][1][1] ;
                break ;
              case 34: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][2][1] ;
                break ;
              case 35: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][3][1] ;
                break ;
              case 36: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][0][2] ;
                break ;
              case 37: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][1][2] ;
                break ;
              case 38: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][2][2] ;
                break ;
              case 39: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][3][2] ;
                break ;
              case 40: /* 厚年（旧共済、パート込み、70歳未満） */
                if ( nenrei < 70 ) {
                  nenrei_betu_ninzu[nenrei] = kounen[nendo-STARTY][sei][nenrei] ;
                  if ( nendo >= PARTYR1 ) {
                    nenrei_betu_ninzu[nenrei] += partnin[nendo-STARTY][sei][nenrei][0][0] ;
                  }
                  if ( nendo==PARTJJ ) {
                    nenrei_betu_ninzu[nenrei]
                      = kounen[PARTYR2-1-STARTY][sei][nenrei] + partnin[PARTYR2-1-STARTY][sei][nenrei][0][2] ;
                  }
                }
                else {
                  nenrei_betu_ninzu[nenrei] = 0.0 ;
                }
                break ;
              case 41: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][8][1] ;
                break ;
              case 42: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][5][1] ;
                break ;
              case 43: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][6][1] ;
                break ;
              case 44: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][7][1] ;
                break ;
              case 45: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][8][2] ;
                break ;
              case 46: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][5][2] ;
                break ;
              case 47: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][6][2] ;
                break ;
              case 48: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][7][2] ;
                break ;
              case 49: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][11][2] 
                                          + partnin[nendo-STARTY][sei][nenrei][15][2] ;
                break ;
              case 50: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][14][2] 
                                          + partnin[nendo-STARTY][sei][nenrei][16][2] ; 
                break ;
              case 51: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][17][2] 
                                          + partnin[nendo-STARTY][sei][nenrei][19][2] ;
                break ;
              case 52: 
                nenrei_betu_ninzu[nenrei] = partnin[nendo-STARTY][sei][nenrei][18][2] 
                                          + partnin[nendo-STARTY][sei][nenrei][20][2] ; 
                break ;
            }
            nenrei_kei_ninzu[bunrui][nendo-STARTY][sei] += nenrei_betu_ninzu[nenrei] ;
            if ( nenrei>100 ) {
              nenrei_betu_ninzu[100] += nenrei_betu_ninzu[nenrei] ;
            }


          }

          /*  出力  */
          if ( ( nendo>=KS ) && ( nendo<=2110 )) { 
              fprintf(fp_wakuout , "%4d,%1d,%4d,", bunrui , sei , nendo );
              fprintf(fp_wakuout , "%lf,", raund(nenrei_kei_ninzu[bunrui][nendo-STARTY][sei],0) );
              for ( nenrei=15; nenrei<=99; nenrei++ ){
                fprintf(fp_wakuout , "%lf,", raund(nenrei_betu_ninzu[nenrei],0) );
              }
              fprintf(fp_wakuout , "%lf\n", raund(nenrei_betu_ninzu[100],0) );
          }

        }
      }

    /*  ファイルクローズ  */
      fclose( fp_wakuout ) ;

  }


}


