diff --git a/assets/0_input/transcription.txt b/assets/0_input/transcription.txt new file mode 100644 index 0000000..71c519d --- /dev/null +++ b/assets/0_input/transcription.txt @@ -0,0 +1 @@ +お客様のライフプランを提供するために、お客様の基本情報をお願いいたします。 すいませんが、お客様のお名前からお願いいたします。 はい、私がテストテロとして、家族情報として、 生年月日の方は? はい、生年月日の方は、1980年の1月の1日です。 ということは、47歳ということでよろしいでしょうか。 はい。 現在のお勤め先はどこになりますでしょうか? IT系ですね。 IT系ですね。 はい。 すいませんが、前代の、ざっくりでよろしいので、年収はどのくらいになりますでしょうか。 年収が今700万くらいですね。 はい。 では、家族構成について、お客様、ご結婚はなされておりますか。 そうですね。 はい。 下の名前だけでいいので、奥様のお名前をお願いいたします。 花子です。 はい。奥様の生年月日を教えていただけますか。 1990年の1月の10日です。 ということは、現在37歳ということでよろしいでしょうか。 そうですね。 奥様は、ご勤めになられてますでしょうか。 そうですね。普通のサービス会ですけど、はい。 ざっくりでよろしいので、奥様の年収が600万くらいですね。 はい。 では続きまして、お子様の方はいらっしゃいますか。 はい、います。 何人いらっしゃいますか。 一人子だけです。 一人だけですね。 生年月日とかは。 2018年の3月の3日ですけど。 そうですか。 現在7歳ということで、たぶん小学校だと思いますけども、小学校の方は孤立ですでしょうか。 孤立です。 あ、孤立ですね。 ありがとうございます。 \ No newline at end of file diff --git a/assets/1_processed/dialogue_script.json b/assets/1_processed/dialogue_script.json new file mode 100644 index 0000000..2e68bbc --- /dev/null +++ b/assets/1_processed/dialogue_script.json @@ -0,0 +1,392 @@ +[ + { + "id": 1, + "text": "お客様のライフプランを提供するために、お客様の基本情報をお願いいたします。", + "duration": 13.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_000.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 2, + "text": "すいませんが、お客様のお名前からお願いいたします。", + "duration": 5.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_001.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 3, + "text": "はい、私がテストテロとして、家族情報として、", + "duration": 11.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_002.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 4, + "text": "生年月日の方は?", + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_003.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 5, + "text": "はい、生年月日の方は、1980年の1月の1日です。", + "duration": 9.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_004.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 6, + "text": "ということは、47歳ということでよろしいでしょうか。", + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_005.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 7, + "text": "はい。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_006.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 8, + "text": "現在のお勤め先はどこになりますでしょうか?", + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_007.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 9, + "text": "IT系ですね。", + "duration": 2.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_008.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 10, + "text": "IT系ですね。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_009.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 11, + "text": "はい。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_010.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 12, + "text": "すいませんが、前代の、ざっくりでよろしいので、年収はどのくらいになりますでしょうか。", + "duration": 6.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_011.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 13, + "text": "年収が今700万くらいですね。", + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_012.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 14, + "text": "はい。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_013.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 15, + "text": "では、家族構成について、お客様、ご結婚はなされておりますか。", + "duration": 7.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_014.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 16, + "text": "そうですね。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_015.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 17, + "text": "はい。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_016.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 18, + "text": "下の名前だけでいいので、奥様のお名前をお願いいたします。", + "duration": 4.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_017.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 19, + "text": "花子です。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_018.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 20, + "text": "はい。奥様の生年月日を教えていただけますか。", + "duration": 4.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_019.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 21, + "text": "1990年の1月の10日です。", + "duration": 7.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_020.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 22, + "text": "ということは、現在37歳ということでよろしいでしょうか。", + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_021.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 23, + "text": "そうですね。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_022.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 24, + "text": "奥様は、ご勤めになられてますでしょうか。", + "duration": 4.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_023.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 25, + "text": "そうですね。普通のサービス会ですけど、はい。", + "duration": 4.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_024.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 26, + "text": "ざっくりでよろしいので、奥様の年収が600万くらいですね。", + "duration": 5.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_025.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 27, + "text": "はい。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_026.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 28, + "text": "では続きまして、お子様の方はいらっしゃいますか。", + "duration": 4.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_027.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 29, + "text": "はい、います。", + "duration": 2.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_028.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 30, + "text": "何人いらっしゃいますか。", + "duration": 2.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_029.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 31, + "text": "一人子だけです。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_030.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 32, + "text": "一人だけですね。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_031.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 33, + "text": "生年月日とかは。", + "duration": 2.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_032.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 34, + "text": "2018年の3月の3日ですけど。", + "duration": 5.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_033.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 35, + "text": "そうですか。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_034.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 36, + "text": "現在7歳ということで、たぶん小学校だと思いますけども、小学校の方は孤立ですでしょうか。", + "duration": 11.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_035.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 37, + "text": "孤立です。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_036.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 38, + "text": "あ、孤立ですね。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_037.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 39, + "text": "ありがとうございます。", + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_038.mp3", + "brollKeyword": "Japanese interview" + } +] \ No newline at end of file diff --git a/assets/1_processed/render_props.json b/assets/1_processed/render_props.json index 789d73a..b3d1dd9 100644 --- a/assets/1_processed/render_props.json +++ b/assets/1_processed/render_props.json @@ -1,9 +1,9 @@ { "meta": { - "title": "家族代表様の人生設計", + "title": "テスト太郎様の人生設計", "currencyUnit": "万円", "duration": 180, - "clientName": "家族代表" + "clientName": "テスト太郎" }, "charts": { "assetDepletion": { @@ -1709,7 +1709,7 @@ "text": "お客様のライフプランを提供するために、お客様の基本情報をお願いいたします。 すいませんが、お客様のお名前からお願いいたします。", "insight": "ライフプランのヒアリング", "targetYear": 2024, - "duration": 11.136, + "duration": 10.416, "type": "dialogue", "visualType": "dialogue", "speaker": "FP", @@ -1735,7 +1735,7 @@ "text": "家族情報として、 生年月日の方は?", "insight": "ライフプランのヒアリング", "targetYear": 2024, - "duration": 3.0, + "duration": 3.024, "type": "dialogue", "visualType": "dialogue", "speaker": "FP", @@ -1761,7 +1761,7 @@ "text": "ということは、47歳ということでよろしいでしょうか。", "insight": "年齢の確認", "targetYear": 2024, - "duration": 4.32, + "duration": 3.888, "type": "dialogue", "visualType": "dialogue", "speaker": "FP", @@ -1787,7 +1787,7 @@ "text": "皆様、こんにちは!ライフプランニングを通じて、皆様の夢を叶えるお手伝いをさせていただきます。", "insight": "オープニング", "targetYear": 2024, - "duration": 7.824, + "duration": 7.08, "type": "narration", "visualType": "ppt", "visualAssetIndex": 0, @@ -1800,7 +1800,7 @@ "text": "本日は、テスト太郎様、花子様ご夫婦のライフプランについて一緒に考えていきたいと思います。", "insight": "家族構成", "targetYear": 2024, - "duration": 7.92, + "duration": 8.064, "type": "narration", "visualType": "ppt", "visualAssetIndex": 1, @@ -1813,7 +1813,7 @@ "text": "太郎様は47歳、花子様は37歳でいらっしゃいますね。息子様の年齢は7歳で、小学校は公立とのこと。教育プランも中学校から私立をご検討されているんですね。", "insight": "教育プラン", "targetYear": 2024, - "duration": 14.328, + "duration": 14.28, "type": "narration", "visualType": "ppt", "visualAssetIndex": 1, @@ -1826,7 +1826,7 @@ "text": "太郎様の年収は703万円、花子様の年収は368万円。合計で1071万円の収入がある一方で、年間支出は1038万円とのこと。現在の資産は852万円ですね。", "insight": "家計の現状", "targetYear": 2024, - "duration": 15.768, + "duration": 15.792, "type": "narration", "visualType": "ppt", "visualAssetIndex": 1, @@ -1839,7 +1839,7 @@ "text": "次に、今後のライフイベントについて見ていきましょう。", "insight": "ライフイベント", "targetYear": 2024, - "duration": 4.488, + "duration": 4.2, "type": "narration", "visualType": "ppt", "visualAssetIndex": 2, @@ -1852,7 +1852,7 @@ "text": "2029年には車の交換、2032年には息子様が私立中学校へ入学されます。結婚記念日の海外旅行やリフォーム工事も予定されていますね。2053年で住宅ローンが完済するのは素晴らしいですね。", "insight": "イベントの詳細", "targetYear": 2030, - "duration": 18.408, + "duration": 18.192, "type": "narration", "visualType": "ppt", "visualAssetIndex": 2, @@ -1902,7 +1902,7 @@ "text": "このグラフは、現在の収入と支出、和将来のライフイベントを考慮した上で、資産がどのように推移していくかを予測したものです。60歳で退職されると、一時的に資産が減少しますが、年金受給開始後は安定していく見込みです。", "insight": "資産推移", "targetYear": 2040, - "duration": 19.728, + "duration": 18.912, "type": "narration", "visualType": "chart", "visualAssetIndex": null, @@ -1912,29 +1912,51 @@ }, { "id": 17, - "text": "最後に、今後の対策とアドバイスです。", - "insight": "対策とアドバイス", + "text": "このライフプランレポートは、お客様の将来設計をサポートするために作成されましたが、現状の保険内容がライフプランに合っているか、家計に無理がないかを確認することが重要です。もし、保障内容が過剰であったり、逆に不足している場合は、保険の見直しを検討しましょう。また、家計の見直しを行い、無駄な支出を削減することも大切です。", + "insight": "保険の見直しと家計の最適化は、安心できる将来設計の基盤となります。", "targetYear": 2024, - "duration": 3.24, + "duration": 28.968, "type": "narration", "visualType": "ppt", "visualAssetIndex": 5, - "brollKeyword": "Japanese consultant pointing at document", - "audioPath": "public\\segment_017.mp3", - "brollPath": "broll/Consultant Pointing_7844849.mp4" + "brollKeyword": "Japanese financial advisor explaining report", + "audioPath": "public\\segment_017.mp3" }, { "id": 18, - "text": "本日はありがとうございました。より詳細なライフプランや個別のご相談については、お気軽にお問い合わせください。", - "insight": "クロージング", + "text": "将来の資産形成のためには、NISAやiDeCoなどの制度を活用することも有効です。これらの制度は税制優遇があり、効率的に資産を形成することができます。ご自身のライフプランに合わせて、最適な制度を選択し、積極的に活用しましょう。", + "insight": "NISAやiDeCoは、税制優遇を活用した効果的な資産形成手段です。", "targetYear": 2024, - "duration": 9.6, + "duration": 19.584, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 5, + "brollKeyword": "Japanese financial advisor explaining report", + "audioPath": "public\\segment_018.mp3" + }, + { + "id": 19, + "text": "将来に不安を感じることは誰にでもありますが、大切なのは、将来に向けて具体的な対策を講じることです。今回のライフプランレポートを参考に、ご自身の将来設計について改めて考えてみましょう。そして、もし何か不安なことや疑問点があれば、お気軽に担当者にご相談ください。専門家として、お客様の状況に合わせた最適なアドバイスをさせていただきます。", + "insight": "将来への漠然とした不安を解消するには、具体的な行動が不可欠です。", + "targetYear": 2024, + "duration": 30.048, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 5, + "brollKeyword": "Japanese financial advisor explaining report", + "audioPath": "public\\segment_019.mp3" + }, + { + "id": 20, + "text": "本日はありがとうございました。テスト太郎様ご家族の幸せな未来を心より応援しております。より詳細なご相談は個別相談にて承ります。お待ちしております。", + "insight": "本日はありがとうございました!", + "targetYear": 2024, + "duration": 13.368, "type": "narration", "visualType": "ppt", "visualAssetIndex": 6, - "brollKeyword": "Japanese advisor bowing politely", - "audioPath": "public\\segment_018.mp3", - "brollPath": "broll/Polite Bowing_7958678.mp4" + "brollKeyword": "Japanese business team smiling", + "audioPath": "public\\segment_020.mp3" } ], "assets": { diff --git a/assets/1_processed/render_props_1.0.json b/assets/1_processed/render_props_1.0.json new file mode 100644 index 0000000..789d73a --- /dev/null +++ b/assets/1_processed/render_props_1.0.json @@ -0,0 +1,2028 @@ +{ + "meta": { + "title": "家族代表様の人生設計", + "currencyUnit": "万円", + "duration": 180, + "clientName": "家族代表" + }, + "charts": { + "assetDepletion": { + "timeline": [ + { + "year": 2025, + "ages": { + "rep": 47, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 288.0, + "assetBalance": 1349.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2026, + "ages": { + "rep": 48, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 294.0, + "assetBalance": 1799.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2027, + "ages": { + "rep": 49, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 300.0, + "assetBalance": 2256.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2028, + "ages": { + "rep": 50, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 306.0, + "assetBalance": 2721.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2029, + "ages": { + "rep": 51, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 312.0, + "assetBalance": 3194.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2030, + "ages": { + "rep": 52, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 318.0, + "assetBalance": 3675.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2031, + "ages": { + "rep": 53, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 324.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2032, + "ages": { + "rep": 54, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 331.0, + "assetBalance": 4661.0 + }, + "events": [ + "Event", + "Event" + ], + "isCritical": false + }, + { + "year": 2033, + "ages": { + "rep": 55, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 337.0, + "assetBalance": 5166.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2034, + "ages": { + "rep": 56, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 344.0, + "assetBalance": 5680.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2035, + "ages": { + "rep": 57, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 351.0, + "assetBalance": 6203.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2036, + "ages": { + "rep": 58, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 358.0, + "assetBalance": 6734.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2037, + "ages": { + "rep": 59, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 365.0, + "assetBalance": 7273.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2038, + "ages": { + "rep": 60, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 373.0, + "assetBalance": 7119.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2039, + "ages": { + "rep": 61, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 380.0, + "assetBalance": 6953.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2040, + "ages": { + "rep": 62, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 388.0, + "assetBalance": 6774.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2041, + "ages": { + "rep": 63, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 395.0, + "assetBalance": 6581.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2042, + "ages": { + "rep": 64, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 403.0, + "assetBalance": 6376.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2043, + "ages": { + "rep": 65, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 411.0, + "assetBalance": 6155.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2044, + "ages": { + "rep": 66, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 420.0, + "assetBalance": 5921.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2045, + "ages": { + "rep": 67, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 428.0, + "assetBalance": 5670.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2046, + "ages": { + "rep": 68, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 437.0, + "assetBalance": 5404.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2047, + "ages": { + "rep": 69, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 445.0, + "assetBalance": 5121.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2048, + "ages": { + "rep": 70, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 454.0, + "assetBalance": 4820.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2049, + "ages": { + "rep": 71, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 463.0, + "assetBalance": 4502.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2050, + "ages": { + "rep": 72, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 472.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2051, + "ages": { + "rep": 73, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 482.0, + "assetBalance": 3807.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2052, + "ages": { + "rep": 74, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 492.0, + "assetBalance": 3430.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2053, + "ages": { + "rep": 75, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 501.0, + "assetBalance": 3031.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2054, + "ages": { + "rep": 76, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 511.0, + "assetBalance": 2611.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2055, + "ages": { + "rep": 77, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 522.0, + "assetBalance": 2167.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2056, + "ages": { + "rep": 78, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 532.0, + "assetBalance": 1700.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2057, + "ages": { + "rep": 79, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 543.0, + "assetBalance": 1209.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2058, + "ages": { + "rep": 80, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 554.0, + "assetBalance": 691.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2059, + "ages": { + "rep": 81, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 565.0, + "assetBalance": 147.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2060, + "ages": { + "rep": 82, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 576.0, + "assetBalance": -424.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2061, + "ages": { + "rep": 83, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 587.0, + "assetBalance": -1075.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2062, + "ages": { + "rep": 84, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 599.0, + "assetBalance": -1836.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2063, + "ages": { + "rep": 85, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 611.0, + "assetBalance": -2723.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2064, + "ages": { + "rep": 86, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 623.0, + "assetBalance": -3754.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2065, + "ages": { + "rep": 87, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 636.0, + "assetBalance": -4954.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2066, + "ages": { + "rep": 88, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 649.0, + "assetBalance": -6345.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2067, + "ages": { + "rep": 89, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 662.0, + "assetBalance": -7959.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2068, + "ages": { + "rep": 90, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 675.0, + "assetBalance": -9827.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2069, + "ages": { + "rep": 91, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 688.0, + "assetBalance": -11990.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2070, + "ages": { + "rep": 92, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 702.0, + "assetBalance": -14490.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2071, + "ages": { + "rep": 93, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 716.0, + "assetBalance": -17380.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2072, + "ages": { + "rep": 94, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 730.0, + "assetBalance": -20717.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2073, + "ages": { + "rep": 95, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 745.0, + "assetBalance": -24570.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2074, + "ages": { + "rep": 96, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 760.0, + "assetBalance": -29015.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2075, + "ages": { + "rep": 97, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 775.0, + "assetBalance": -34143.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2076, + "ages": { + "rep": 98, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 791.0, + "assetBalance": -40055.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2077, + "ages": { + "rep": 99, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 806.0, + "assetBalance": -46870.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2078, + "ages": { + "rep": 100, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 823.0, + "assetBalance": -54723.0 + }, + "events": [], + "isCritical": true + } + ], + "meta": { + "currencyUnit": "万円", + "startYear": 2025 + } + }, + "cashFlow": { + "timeline": [ + { + "year": 2025, + "age": 47, + "income": { + "total": 703 + }, + "expenses": { + "living": 115.2, + "housing": 86.39999999999999, + "education": 43.199999999999996, + "tax": 28.8, + "event": 14.4 + }, + "totalExpense": 288.0, + "netCashFlow": 415.0, + "assetBalance": 1349.0 + }, + { + "year": 2026, + "age": 48, + "income": { + "total": 703 + }, + "expenses": { + "living": 117.60000000000001, + "housing": 88.2, + "education": 44.1, + "tax": 29.400000000000002, + "event": 14.700000000000001 + }, + "totalExpense": 294.0, + "netCashFlow": 409.0, + "assetBalance": 1799.0 + }, + { + "year": 2027, + "age": 49, + "income": { + "total": 703 + }, + "expenses": { + "living": 120.0, + "housing": 90.0, + "education": 45.0, + "tax": 30.0, + "event": 15.0 + }, + "totalExpense": 300.0, + "netCashFlow": 403.0, + "assetBalance": 2256.0 + }, + { + "year": 2028, + "age": 50, + "income": { + "total": 703 + }, + "expenses": { + "living": 122.4, + "housing": 91.8, + "education": 45.9, + "tax": 30.6, + "event": 15.3 + }, + "totalExpense": 306.0, + "netCashFlow": 397.0, + "assetBalance": 2721.0 + }, + { + "year": 2029, + "age": 51, + "income": { + "total": 703 + }, + "expenses": { + "living": 124.80000000000001, + "housing": 93.6, + "education": 46.8, + "tax": 31.200000000000003, + "event": 15.600000000000001 + }, + "totalExpense": 312.0, + "netCashFlow": 391.0, + "assetBalance": 3194.0 + }, + { + "year": 2030, + "age": 52, + "income": { + "total": 703 + }, + "expenses": { + "living": 127.2, + "housing": 95.39999999999999, + "education": 47.699999999999996, + "tax": 31.8, + "event": 15.9 + }, + "totalExpense": 318.0, + "netCashFlow": 385.0, + "assetBalance": 3675.0 + }, + { + "year": 2031, + "age": 53, + "income": { + "total": 703 + }, + "expenses": { + "living": 129.6, + "housing": 97.2, + "education": 48.6, + "tax": 32.4, + "event": 16.2 + }, + "totalExpense": 324.0, + "netCashFlow": 379.0, + "assetBalance": 4164.0 + }, + { + "year": 2032, + "age": 54, + "income": { + "total": 703 + }, + "expenses": { + "living": 132.4, + "housing": 99.3, + "education": 49.65, + "tax": 33.1, + "event": 16.55 + }, + "totalExpense": 331.0, + "netCashFlow": 372.0, + "assetBalance": 4661.0 + }, + { + "year": 2033, + "age": 55, + "income": { + "total": 703 + }, + "expenses": { + "living": 134.8, + "housing": 101.1, + "education": 50.55, + "tax": 33.7, + "event": 16.85 + }, + "totalExpense": 337.0, + "netCashFlow": 366.0, + "assetBalance": 5166.0 + }, + { + "year": 2034, + "age": 56, + "income": { + "total": 703 + }, + "expenses": { + "living": 137.6, + "housing": 103.2, + "education": 51.6, + "tax": 34.4, + "event": 17.2 + }, + "totalExpense": 344.0, + "netCashFlow": 359.0, + "assetBalance": 5680.0 + }, + { + "year": 2035, + "age": 57, + "income": { + "total": 703 + }, + "expenses": { + "living": 140.4, + "housing": 105.3, + "education": 52.65, + "tax": 35.1, + "event": 17.55 + }, + "totalExpense": 351.0, + "netCashFlow": 352.0, + "assetBalance": 6203.0 + }, + { + "year": 2036, + "age": 58, + "income": { + "total": 703 + }, + "expenses": { + "living": 143.20000000000002, + "housing": 107.39999999999999, + "education": 53.699999999999996, + "tax": 35.800000000000004, + "event": 17.900000000000002 + }, + "totalExpense": 358.0, + "netCashFlow": 345.0, + "assetBalance": 6734.0 + }, + { + "year": 2037, + "age": 59, + "income": { + "total": 703 + }, + "expenses": { + "living": 146.0, + "housing": 109.5, + "education": 54.75, + "tax": 36.5, + "event": 18.25 + }, + "totalExpense": 365.0, + "netCashFlow": 338.0, + "assetBalance": 7273.0 + }, + { + "year": 2038, + "age": 60, + "income": { + "total": 0 + }, + "expenses": { + "living": 149.20000000000002, + "housing": 111.89999999999999, + "education": 55.949999999999996, + "tax": 37.300000000000004, + "event": 18.650000000000002 + }, + "totalExpense": 373.0, + "netCashFlow": -373.0, + "assetBalance": 7119.0 + }, + { + "year": 2039, + "age": 61, + "income": { + "total": 0 + }, + "expenses": { + "living": 152.0, + "housing": 114.0, + "education": 57.0, + "tax": 38.0, + "event": 19.0 + }, + "totalExpense": 380.0, + "netCashFlow": -380.0, + "assetBalance": 6953.0 + }, + { + "year": 2040, + "age": 62, + "income": { + "total": 0 + }, + "expenses": { + "living": 155.20000000000002, + "housing": 116.39999999999999, + "education": 58.199999999999996, + "tax": 38.800000000000004, + "event": 19.400000000000002 + }, + "totalExpense": 388.0, + "netCashFlow": -388.0, + "assetBalance": 6774.0 + }, + { + "year": 2041, + "age": 63, + "income": { + "total": 0 + }, + "expenses": { + "living": 158.0, + "housing": 118.5, + "education": 59.25, + "tax": 39.5, + "event": 19.75 + }, + "totalExpense": 395.0, + "netCashFlow": -395.0, + "assetBalance": 6581.0 + }, + { + "year": 2042, + "age": 64, + "income": { + "total": 0 + }, + "expenses": { + "living": 161.20000000000002, + "housing": 120.89999999999999, + "education": 60.449999999999996, + "tax": 40.300000000000004, + "event": 20.150000000000002 + }, + "totalExpense": 403.0, + "netCashFlow": -403.0, + "assetBalance": 6376.0 + }, + { + "year": 2043, + "age": 65, + "income": { + "total": 0 + }, + "expenses": { + "living": 164.4, + "housing": 123.3, + "education": 61.65, + "tax": 41.1, + "event": 20.55 + }, + "totalExpense": 411.0, + "netCashFlow": -411.0, + "assetBalance": 6155.0 + }, + { + "year": 2044, + "age": 66, + "income": { + "total": 0 + }, + "expenses": { + "living": 168.0, + "housing": 126.0, + "education": 63.0, + "tax": 42.0, + "event": 21.0 + }, + "totalExpense": 420.0, + "netCashFlow": -420.0, + "assetBalance": 5921.0 + }, + { + "year": 2045, + "age": 67, + "income": { + "total": 0 + }, + "expenses": { + "living": 171.20000000000002, + "housing": 128.4, + "education": 64.2, + "tax": 42.800000000000004, + "event": 21.400000000000002 + }, + "totalExpense": 428.0, + "netCashFlow": -428.0, + "assetBalance": 5670.0 + }, + { + "year": 2046, + "age": 68, + "income": { + "total": 0 + }, + "expenses": { + "living": 174.8, + "housing": 131.1, + "education": 65.55, + "tax": 43.7, + "event": 21.85 + }, + "totalExpense": 437.0, + "netCashFlow": -437.0, + "assetBalance": 5404.0 + }, + { + "year": 2047, + "age": 69, + "income": { + "total": 0 + }, + "expenses": { + "living": 178.0, + "housing": 133.5, + "education": 66.75, + "tax": 44.5, + "event": 22.25 + }, + "totalExpense": 445.0, + "netCashFlow": -445.0, + "assetBalance": 5121.0 + }, + { + "year": 2048, + "age": 70, + "income": { + "total": 0 + }, + "expenses": { + "living": 181.60000000000002, + "housing": 136.2, + "education": 68.1, + "tax": 45.400000000000006, + "event": 22.700000000000003 + }, + "totalExpense": 454.0, + "netCashFlow": -454.0, + "assetBalance": 4820.0 + }, + { + "year": 2049, + "age": 71, + "income": { + "total": 0 + }, + "expenses": { + "living": 185.20000000000002, + "housing": 138.9, + "education": 69.45, + "tax": 46.300000000000004, + "event": 23.150000000000002 + }, + "totalExpense": 463.0, + "netCashFlow": -463.0, + "assetBalance": 4502.0 + }, + { + "year": 2050, + "age": 72, + "income": { + "total": 0 + }, + "expenses": { + "living": 188.8, + "housing": 141.6, + "education": 70.8, + "tax": 47.2, + "event": 23.6 + }, + "totalExpense": 472.0, + "netCashFlow": -472.0, + "assetBalance": 4164.0 + }, + { + "year": 2051, + "age": 73, + "income": { + "total": 0 + }, + "expenses": { + "living": 192.8, + "housing": 144.6, + "education": 72.3, + "tax": 48.2, + "event": 24.1 + }, + "totalExpense": 482.0, + "netCashFlow": -482.0, + "assetBalance": 3807.0 + }, + { + "year": 2052, + "age": 74, + "income": { + "total": 0 + }, + "expenses": { + "living": 196.8, + "housing": 147.6, + "education": 73.8, + "tax": 49.2, + "event": 24.6 + }, + "totalExpense": 492.0, + "netCashFlow": -492.0, + "assetBalance": 3430.0 + }, + { + "year": 2053, + "age": 75, + "income": { + "total": 0 + }, + "expenses": { + "living": 200.4, + "housing": 150.29999999999998, + "education": 75.14999999999999, + "tax": 50.1, + "event": 25.05 + }, + "totalExpense": 501.0, + "netCashFlow": -501.0, + "assetBalance": 3031.0 + }, + { + "year": 2054, + "age": 76, + "income": { + "total": 0 + }, + "expenses": { + "living": 204.4, + "housing": 153.29999999999998, + "education": 76.64999999999999, + "tax": 51.1, + "event": 25.55 + }, + "totalExpense": 511.0, + "netCashFlow": -511.0, + "assetBalance": 2611.0 + }, + { + "year": 2055, + "age": 77, + "income": { + "total": 0 + }, + "expenses": { + "living": 208.8, + "housing": 156.6, + "education": 78.3, + "tax": 52.2, + "event": 26.1 + }, + "totalExpense": 522.0, + "netCashFlow": -522.0, + "assetBalance": 2167.0 + }, + { + "year": 2056, + "age": 78, + "income": { + "total": 0 + }, + "expenses": { + "living": 212.8, + "housing": 159.6, + "education": 79.8, + "tax": 53.2, + "event": 26.6 + }, + "totalExpense": 532.0, + "netCashFlow": -532.0, + "assetBalance": 1700.0 + }, + { + "year": 2057, + "age": 79, + "income": { + "total": 0 + }, + "expenses": { + "living": 217.20000000000002, + "housing": 162.9, + "education": 81.45, + "tax": 54.300000000000004, + "event": 27.150000000000002 + }, + "totalExpense": 543.0, + "netCashFlow": -543.0, + "assetBalance": 1209.0 + }, + { + "year": 2058, + "age": 80, + "income": { + "total": 0 + }, + "expenses": { + "living": 221.60000000000002, + "housing": 166.2, + "education": 83.1, + "tax": 55.400000000000006, + "event": 27.700000000000003 + }, + "totalExpense": 554.0, + "netCashFlow": -554.0, + "assetBalance": 691.0 + }, + { + "year": 2059, + "age": 81, + "income": { + "total": 0 + }, + "expenses": { + "living": 226.0, + "housing": 169.5, + "education": 84.75, + "tax": 56.5, + "event": 28.25 + }, + "totalExpense": 565.0, + "netCashFlow": -565.0, + "assetBalance": 147.0 + }, + { + "year": 2060, + "age": 82, + "income": { + "total": 0 + }, + "expenses": { + "living": 230.4, + "housing": 172.79999999999998, + "education": 86.39999999999999, + "tax": 57.6, + "event": 28.8 + }, + "totalExpense": 576.0, + "netCashFlow": -576.0, + "assetBalance": -424.0 + }, + { + "year": 2061, + "age": 83, + "income": { + "total": 0 + }, + "expenses": { + "living": 234.8, + "housing": 176.1, + "education": 88.05, + "tax": 58.7, + "event": 29.35 + }, + "totalExpense": 587.0, + "netCashFlow": -587.0, + "assetBalance": -1075.0 + }, + { + "year": 2062, + "age": 84, + "income": { + "total": 0 + }, + "expenses": { + "living": 239.60000000000002, + "housing": 179.7, + "education": 89.85, + "tax": 59.900000000000006, + "event": 29.950000000000003 + }, + "totalExpense": 599.0, + "netCashFlow": -599.0, + "assetBalance": -1836.0 + }, + { + "year": 2063, + "age": 85, + "income": { + "total": 0 + }, + "expenses": { + "living": 244.4, + "housing": 183.29999999999998, + "education": 91.64999999999999, + "tax": 61.1, + "event": 30.55 + }, + "totalExpense": 611.0, + "netCashFlow": -611.0, + "assetBalance": -2723.0 + }, + { + "year": 2064, + "age": 86, + "income": { + "total": 0 + }, + "expenses": { + "living": 249.20000000000002, + "housing": 186.9, + "education": 93.45, + "tax": 62.300000000000004, + "event": 31.150000000000002 + }, + "totalExpense": 623.0, + "netCashFlow": -623.0, + "assetBalance": -3754.0 + }, + { + "year": 2065, + "age": 87, + "income": { + "total": 0 + }, + "expenses": { + "living": 254.4, + "housing": 190.79999999999998, + "education": 95.39999999999999, + "tax": 63.6, + "event": 31.8 + }, + "totalExpense": 636.0, + "netCashFlow": -636.0, + "assetBalance": -4954.0 + }, + { + "year": 2066, + "age": 88, + "income": { + "total": 0 + }, + "expenses": { + "living": 259.6, + "housing": 194.7, + "education": 97.35, + "tax": 64.9, + "event": 32.45 + }, + "totalExpense": 649.0, + "netCashFlow": -649.0, + "assetBalance": -6345.0 + }, + { + "year": 2067, + "age": 89, + "income": { + "total": 0 + }, + "expenses": { + "living": 264.8, + "housing": 198.6, + "education": 99.3, + "tax": 66.2, + "event": 33.1 + }, + "totalExpense": 662.0, + "netCashFlow": -662.0, + "assetBalance": -7959.0 + }, + { + "year": 2068, + "age": 90, + "income": { + "total": 0 + }, + "expenses": { + "living": 270.0, + "housing": 202.5, + "education": 101.25, + "tax": 67.5, + "event": 33.75 + }, + "totalExpense": 675.0, + "netCashFlow": -675.0, + "assetBalance": -9827.0 + }, + { + "year": 2069, + "age": 91, + "income": { + "total": 0 + }, + "expenses": { + "living": 275.2, + "housing": 206.4, + "education": 103.2, + "tax": 68.8, + "event": 34.4 + }, + "totalExpense": 688.0, + "netCashFlow": -688.0, + "assetBalance": -11990.0 + }, + { + "year": 2070, + "age": 92, + "income": { + "total": 0 + }, + "expenses": { + "living": 280.8, + "housing": 210.6, + "education": 105.3, + "tax": 70.2, + "event": 35.1 + }, + "totalExpense": 702.0, + "netCashFlow": -702.0, + "assetBalance": -14490.0 + }, + { + "year": 2071, + "age": 93, + "income": { + "total": 0 + }, + "expenses": { + "living": 286.40000000000003, + "housing": 214.79999999999998, + "education": 107.39999999999999, + "tax": 71.60000000000001, + "event": 35.800000000000004 + }, + "totalExpense": 716.0, + "netCashFlow": -716.0, + "assetBalance": -17380.0 + }, + { + "year": 2072, + "age": 94, + "income": { + "total": 0 + }, + "expenses": { + "living": 292.0, + "housing": 219.0, + "education": 109.5, + "tax": 73.0, + "event": 36.5 + }, + "totalExpense": 730.0, + "netCashFlow": -730.0, + "assetBalance": -20717.0 + }, + { + "year": 2073, + "age": 95, + "income": { + "total": 0 + }, + "expenses": { + "living": 298.0, + "housing": 223.5, + "education": 111.75, + "tax": 74.5, + "event": 37.25 + }, + "totalExpense": 745.0, + "netCashFlow": -745.0, + "assetBalance": -24570.0 + }, + { + "year": 2074, + "age": 96, + "income": { + "total": 0 + }, + "expenses": { + "living": 304.0, + "housing": 228.0, + "education": 114.0, + "tax": 76.0, + "event": 38.0 + }, + "totalExpense": 760.0, + "netCashFlow": -760.0, + "assetBalance": -29015.0 + }, + { + "year": 2075, + "age": 97, + "income": { + "total": 0 + }, + "expenses": { + "living": 310.0, + "housing": 232.5, + "education": 116.25, + "tax": 77.5, + "event": 38.75 + }, + "totalExpense": 775.0, + "netCashFlow": -775.0, + "assetBalance": -34143.0 + }, + { + "year": 2076, + "age": 98, + "income": { + "total": 0 + }, + "expenses": { + "living": 316.40000000000003, + "housing": 237.29999999999998, + "education": 118.64999999999999, + "tax": 79.10000000000001, + "event": 39.550000000000004 + }, + "totalExpense": 791.0, + "netCashFlow": -791.0, + "assetBalance": -40055.0 + }, + { + "year": 2077, + "age": 99, + "income": { + "total": 0 + }, + "expenses": { + "living": 322.40000000000003, + "housing": 241.79999999999998, + "education": 120.89999999999999, + "tax": 80.60000000000001, + "event": 40.300000000000004 + }, + "totalExpense": 806.0, + "netCashFlow": -806.0, + "assetBalance": -46870.0 + }, + { + "year": 2078, + "age": 100, + "income": { + "total": 0 + }, + "expenses": { + "living": 329.20000000000005, + "housing": 246.89999999999998, + "education": 123.44999999999999, + "tax": 82.30000000000001, + "event": 41.150000000000006 + }, + "totalExpense": 823.0, + "netCashFlow": -823.0, + "assetBalance": -54723.0 + } + ], + "meta": { + "currencyUnit": "万円" + } + } + }, + "script": [ + { + "id": 1, + "text": "お客様のライフプランを提供するために、お客様の基本情報をお願いいたします。 すいませんが、お客様のお名前からお願いいたします。", + "insight": "ライフプランのヒアリング", + "targetYear": 2024, + "duration": 11.136, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "brollKeyword": "Japanese financial advisor consulting client", + "audioPath": "public\\segment_001.mp3", + "brollPath": "broll/Client Consulting_4486777.mp4" + }, + { + "id": 2, + "text": "はい、私がテスト太郎です", + "insight": "お客様の自己紹介", + "targetYear": 2024, + "duration": 8.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "brollKeyword": "Japanese man introduced himself", + "audioPath": "public/dialogue_clip_1.mp3", + "brollPath": "broll/Self-Introduction_7958453.mp4" + }, + { + "id": 3, + "text": "家族情報として、 生年月日の方は?", + "insight": "ライフプランのヒアリング", + "targetYear": 2024, + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "brollKeyword": "Japanese advisor asking about family", + "audioPath": "public\\segment_003.mp3", + "brollPath": "broll/Advisor Inquiring_7844849.mp4" + }, + { + "id": 4, + "text": "1980年の1月の1日です。", + "insight": "生年月日の回答", + "targetYear": 2024, + "duration": 9.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "brollKeyword": "Asian man giving his birthday", + "audioPath": "public/dialogue_clip_2.mp3", + "brollPath": "broll/Giving Birthday_5529618.mp4" + }, + { + "id": 5, + "text": "ということは、47歳ということでよろしいでしょうか。", + "insight": "年齢の確認", + "targetYear": 2024, + "duration": 4.32, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "brollKeyword": "Japanese financial planner verifying age", + "audioPath": "public\\segment_005.mp3", + "brollPath": "broll/Verifying Age_6539952.mp4" + }, + { + "id": 6, + "text": "そうですね、はい。", + "insight": "年齢の确认", + "targetYear": 2024, + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "brollKeyword": "Asian man nodding in agreement", + "audioPath": "public/dialogue_clip_3.mp3", + "brollPath": "broll/Nodding In Agreement_4586579.mp4" + }, + { + "id": 7, + "text": "皆様、こんにちは!ライフプランニングを通じて、皆様の夢を叶えるお手伝いをさせていただきます。", + "insight": "オープニング", + "targetYear": 2024, + "duration": 7.824, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 0, + "brollKeyword": "Japanese businessman greeting warmly", + "audioPath": "public\\segment_007.mp3", + "brollPath": "broll/Warm Greeting_3304352.mp4" + }, + { + "id": 8, + "text": "本日は、テスト太郎様、花子様ご夫婦のライフプランについて一緒に考えていきたいと思います。", + "insight": "家族構成", + "targetYear": 2024, + "duration": 7.92, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 1, + "brollKeyword": "Japanese family sitting together", + "audioPath": "public\\segment_008.mp3", + "brollPath": "broll/Family Gathering_5856567.mp4" + }, + { + "id": 9, + "text": "太郎様は47歳、花子様は37歳でいらっしゃいますね。息子様の年齢は7歳で、小学校は公立とのこと。教育プランも中学校から私立をご検討されているんですね。", + "insight": "教育プラン", + "targetYear": 2024, + "duration": 14.328, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 1, + "brollKeyword": "Japanese student studying hard", + "audioPath": "public\\segment_009.mp3", + "brollPath": "broll/Studying Hard_7958453.mp4" + }, + { + "id": 10, + "text": "太郎様の年収は703万円、花子様の年収は368万円。合計で1071万円の収入がある一方で、年間支出は1038万円とのこと。現在の資産は852万円ですね。", + "insight": "家計の現状", + "targetYear": 2024, + "duration": 15.768, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 1, + "brollKeyword": "Japanese couple calculating budget", + "audioPath": "public\\segment_010.mp3", + "brollPath": "broll/Budgeting Couple_7958685.mp4" + }, + { + "id": 11, + "text": "次に、今後のライフイベントについて見ていきましょう。", + "insight": "ライフイベント", + "targetYear": 2024, + "duration": 4.488, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 2, + "brollKeyword": "Japanese calendar with events marked", + "audioPath": "public\\segment_011.mp3", + "brollPath": "broll/Marked Calendar_9057559.mp4" + }, + { + "id": 12, + "text": "2029年には車の交換、2032年には息子様が私立中学校へ入学されます。結婚記念日の海外旅行やリフォーム工事も予定されていますね。2053年で住宅ローンが完済するのは素晴らしいですね。", + "insight": "イベントの詳細", + "targetYear": 2030, + "duration": 18.408, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 2, + "brollKeyword": "Japanese family visiting a new car", + "audioPath": "public\\segment_012.mp3", + "brollPath": "broll/Car Shopping_31980658.mp4" + }, + { + "id": 13, + "text": "将来に対する不安について、インタビューでこのように語られていました。", + "insight": "お客様の声", + "targetYear": 2024, + "duration": 5.005, + "type": "narration", + "visualType": "video", + "visualAssetIndex": 0, + "brollKeyword": "Japanese man talking in interview", + "brollPath": "broll/Interview Talking_4428754.mp4" + }, + { + "id": 14, + "text": "将来に対する不安について、インタビューでこのように語られていました。", + "insight": "お客様の声", + "targetYear": 2024, + "duration": 5.005, + "type": "narration", + "visualType": "video", + "visualAssetIndex": 1, + "brollKeyword": "Japanese man explaining feelings", + "brollPath": "broll/Expressing Feelings_7957918.mp4" + }, + { + "id": 15, + "text": "それでは、今後の資産推移をシミュレーションで見てみましょう。", + "insight": "シミュレーション", + "targetYear": 2024, + "duration": 5.352, + "type": "narration", + "visualType": "chart", + "visualAssetIndex": null, + "brollKeyword": "Japanese financial consultant showing graphs", + "audioPath": "public\\segment_015.mp3", + "brollPath": "broll/Showing Graphs_7844858.mp4" + }, + { + "id": 16, + "text": "このグラフは、現在の収入と支出、和将来のライフイベントを考慮した上で、資産がどのように推移していくかを予測したものです。60歳で退職されると、一時的に資産が減少しますが、年金受給開始後は安定していく見込みです。", + "insight": "資産推移", + "targetYear": 2040, + "duration": 19.728, + "type": "narration", + "visualType": "chart", + "visualAssetIndex": null, + "brollKeyword": "Japanese retired couple smiling", + "audioPath": "public\\segment_016.mp3", + "brollPath": "broll/Smiling Retirees_6761158.mp4" + }, + { + "id": 17, + "text": "最後に、今後の対策とアドバイスです。", + "insight": "対策とアドバイス", + "targetYear": 2024, + "duration": 3.24, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 5, + "brollKeyword": "Japanese consultant pointing at document", + "audioPath": "public\\segment_017.mp3", + "brollPath": "broll/Consultant Pointing_7844849.mp4" + }, + { + "id": 18, + "text": "本日はありがとうございました。より詳細なライフプランや個別のご相談については、お気軽にお問い合わせください。", + "insight": "クロージング", + "targetYear": 2024, + "duration": 9.6, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 6, + "brollKeyword": "Japanese advisor bowing politely", + "audioPath": "public\\segment_018.mp3", + "brollPath": "broll/Polite Bowing_7958678.mp4" + } + ], + "assets": { + "broll": { + "Japanese family sitting together": "Family Gathering_5856567.mp4", + "Japanese couple calculating budget": "Budgeting Couple_7958685.mp4", + "Japanese man explaining feelings": "Expressing Feelings_7957918.mp4", + "Asian man nodding in agreement": "Nodding In Agreement_4586579.mp4", + "Japanese retired couple smiling": "Smiling Retirees_6761158.mp4", + "Japanese family visiting a new car": "Car Shopping_31980658.mp4", + "Japanese consultant pointing at document": "Consultant Pointing_7844849.mp4", + "Japanese advisor asking about family": "Advisor Inquiring_7844849.mp4", + "Asian man giving his birthday": "Giving Birthday_5529618.mp4", + "Japanese businessman greeting warmly": "Warm Greeting_3304352.mp4", + "Japanese student studying hard": "Studying Hard_7958453.mp4", + "Japanese calendar with events marked": "Marked Calendar_9057559.mp4", + "Japanese financial planner verifying age": "Verifying Age_6539952.mp4", + "Japanese advisor bowing politely": "Polite Bowing_7958678.mp4", + "Japanese man introduced himself": "Self-Introduction_7958453.mp4", + "Japanese financial consultant showing graphs": "Showing Graphs_7844858.mp4", + "Japanese financial advisor consulting client": "Client Consulting_4486777.mp4", + "Japanese man talking in interview": "Interview Talking_4428754.mp4" + }, + "videoClips": [ + { + "id": "clip_1", + "outputPath": "public\\clip_1_13.0-18.0.mp4", + "filepath": "public\\clip_1_13.0-18.0.mp4", + "start": 13.0, + "end": 18.0, + "duration": 5.0, + "description": "すいませんが、お客様のお名前からお願いいたします。\nはい、私がテストテロとして、家族情報として、\n生年月日の方は?\nはい、生年月日の方は、1980年の1月の1日です。" + }, + { + "id": "clip_2", + "outputPath": "public\\clip_2_52.0-57.0.mp4", + "filepath": "public\\clip_2_52.0-57.0.mp4", + "start": 52.0, + "end": 57.0, + "duration": 5.0, + "description": "すいませんが、前代の、ざっくりでよろしいので、年収はどのくらいになりますでしょうか。\n年収が今700万くらいですね。" + }, + { + "id": "clip_3", + "outputPath": "public\\clip_3_71.0-76.0.mp4", + "filepath": "public\\clip_3_71.0-76.0.mp4", + "start": 71.0, + "end": 76.0, + "duration": 5.0, + "description": "下の名前だけでいいので、奥様のお名前をお願いいたします。\n花子です。\nはい。奥様の生年月日を教えていただけますか。\n1990年の1月の10日です。" + } + ], + "slides": [ + { + "index": 0, + "title": "ライフプラン", + "image_path": "public/slide_001.png" + }, + { + "index": 1, + "title": "2", + "image_path": "public/slide_002.png" + }, + { + "index": 2, + "title": "3", + "image_path": "public/slide_003.png" + }, + { + "index": 3, + "title": "4", + "image_path": "public/slide_004.png" + }, + { + "index": 4, + "title": "5", + "image_path": "public/slide_005.png" + }, + { + "index": 5, + "title": "6", + "image_path": "public/slide_006.png" + }, + { + "index": 6, + "title": "7", + "image_path": "public/slide_007.png" + } + ] + } +} \ No newline at end of file diff --git a/assets/1_processed/render_props_2.0.json b/assets/1_processed/render_props_2.0.json new file mode 100644 index 0000000..b3d1dd9 --- /dev/null +++ b/assets/1_processed/render_props_2.0.json @@ -0,0 +1,2050 @@ +{ + "meta": { + "title": "テスト太郎様の人生設計", + "currencyUnit": "万円", + "duration": 180, + "clientName": "テスト太郎" + }, + "charts": { + "assetDepletion": { + "timeline": [ + { + "year": 2025, + "ages": { + "rep": 47, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 288.0, + "assetBalance": 1349.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2026, + "ages": { + "rep": 48, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 294.0, + "assetBalance": 1799.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2027, + "ages": { + "rep": 49, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 300.0, + "assetBalance": 2256.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2028, + "ages": { + "rep": 50, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 306.0, + "assetBalance": 2721.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2029, + "ages": { + "rep": 51, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 312.0, + "assetBalance": 3194.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2030, + "ages": { + "rep": 52, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 318.0, + "assetBalance": 3675.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2031, + "ages": { + "rep": 53, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 324.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2032, + "ages": { + "rep": 54, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 331.0, + "assetBalance": 4661.0 + }, + "events": [ + "Event", + "Event" + ], + "isCritical": false + }, + { + "year": 2033, + "ages": { + "rep": 55, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 337.0, + "assetBalance": 5166.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2034, + "ages": { + "rep": 56, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 344.0, + "assetBalance": 5680.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2035, + "ages": { + "rep": 57, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 351.0, + "assetBalance": 6203.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2036, + "ages": { + "rep": 58, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 358.0, + "assetBalance": 6734.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2037, + "ages": { + "rep": 59, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 365.0, + "assetBalance": 7273.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2038, + "ages": { + "rep": 60, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 373.0, + "assetBalance": 7119.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2039, + "ages": { + "rep": 61, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 380.0, + "assetBalance": 6953.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2040, + "ages": { + "rep": 62, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 388.0, + "assetBalance": 6774.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2041, + "ages": { + "rep": 63, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 395.0, + "assetBalance": 6581.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2042, + "ages": { + "rep": 64, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 403.0, + "assetBalance": 6376.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2043, + "ages": { + "rep": 65, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 411.0, + "assetBalance": 6155.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2044, + "ages": { + "rep": 66, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 420.0, + "assetBalance": 5921.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2045, + "ages": { + "rep": 67, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 428.0, + "assetBalance": 5670.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2046, + "ages": { + "rep": 68, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 437.0, + "assetBalance": 5404.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2047, + "ages": { + "rep": 69, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 445.0, + "assetBalance": 5121.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2048, + "ages": { + "rep": 70, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 454.0, + "assetBalance": 4820.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2049, + "ages": { + "rep": 71, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 463.0, + "assetBalance": 4502.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2050, + "ages": { + "rep": 72, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 472.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2051, + "ages": { + "rep": 73, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 482.0, + "assetBalance": 3807.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2052, + "ages": { + "rep": 74, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 492.0, + "assetBalance": 3430.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2053, + "ages": { + "rep": 75, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 501.0, + "assetBalance": 3031.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2054, + "ages": { + "rep": 76, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 511.0, + "assetBalance": 2611.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2055, + "ages": { + "rep": 77, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 522.0, + "assetBalance": 2167.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2056, + "ages": { + "rep": 78, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 532.0, + "assetBalance": 1700.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2057, + "ages": { + "rep": 79, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 543.0, + "assetBalance": 1209.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2058, + "ages": { + "rep": 80, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 554.0, + "assetBalance": 691.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2059, + "ages": { + "rep": 81, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 565.0, + "assetBalance": 147.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2060, + "ages": { + "rep": 82, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 576.0, + "assetBalance": -424.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2061, + "ages": { + "rep": 83, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 587.0, + "assetBalance": -1075.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2062, + "ages": { + "rep": 84, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 599.0, + "assetBalance": -1836.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2063, + "ages": { + "rep": 85, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 611.0, + "assetBalance": -2723.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2064, + "ages": { + "rep": 86, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 623.0, + "assetBalance": -3754.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2065, + "ages": { + "rep": 87, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 636.0, + "assetBalance": -4954.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2066, + "ages": { + "rep": 88, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 649.0, + "assetBalance": -6345.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2067, + "ages": { + "rep": 89, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 662.0, + "assetBalance": -7959.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2068, + "ages": { + "rep": 90, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 675.0, + "assetBalance": -9827.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2069, + "ages": { + "rep": 91, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 688.0, + "assetBalance": -11990.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2070, + "ages": { + "rep": 92, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 702.0, + "assetBalance": -14490.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2071, + "ages": { + "rep": 93, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 716.0, + "assetBalance": -17380.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2072, + "ages": { + "rep": 94, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 730.0, + "assetBalance": -20717.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2073, + "ages": { + "rep": 95, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 745.0, + "assetBalance": -24570.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2074, + "ages": { + "rep": 96, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 760.0, + "assetBalance": -29015.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2075, + "ages": { + "rep": 97, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 775.0, + "assetBalance": -34143.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2076, + "ages": { + "rep": 98, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 791.0, + "assetBalance": -40055.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2077, + "ages": { + "rep": 99, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 806.0, + "assetBalance": -46870.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2078, + "ages": { + "rep": 100, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 823.0, + "assetBalance": -54723.0 + }, + "events": [], + "isCritical": true + } + ], + "meta": { + "currencyUnit": "万円", + "startYear": 2025 + } + }, + "cashFlow": { + "timeline": [ + { + "year": 2025, + "age": 47, + "income": { + "total": 703 + }, + "expenses": { + "living": 115.2, + "housing": 86.39999999999999, + "education": 43.199999999999996, + "tax": 28.8, + "event": 14.4 + }, + "totalExpense": 288.0, + "netCashFlow": 415.0, + "assetBalance": 1349.0 + }, + { + "year": 2026, + "age": 48, + "income": { + "total": 703 + }, + "expenses": { + "living": 117.60000000000001, + "housing": 88.2, + "education": 44.1, + "tax": 29.400000000000002, + "event": 14.700000000000001 + }, + "totalExpense": 294.0, + "netCashFlow": 409.0, + "assetBalance": 1799.0 + }, + { + "year": 2027, + "age": 49, + "income": { + "total": 703 + }, + "expenses": { + "living": 120.0, + "housing": 90.0, + "education": 45.0, + "tax": 30.0, + "event": 15.0 + }, + "totalExpense": 300.0, + "netCashFlow": 403.0, + "assetBalance": 2256.0 + }, + { + "year": 2028, + "age": 50, + "income": { + "total": 703 + }, + "expenses": { + "living": 122.4, + "housing": 91.8, + "education": 45.9, + "tax": 30.6, + "event": 15.3 + }, + "totalExpense": 306.0, + "netCashFlow": 397.0, + "assetBalance": 2721.0 + }, + { + "year": 2029, + "age": 51, + "income": { + "total": 703 + }, + "expenses": { + "living": 124.80000000000001, + "housing": 93.6, + "education": 46.8, + "tax": 31.200000000000003, + "event": 15.600000000000001 + }, + "totalExpense": 312.0, + "netCashFlow": 391.0, + "assetBalance": 3194.0 + }, + { + "year": 2030, + "age": 52, + "income": { + "total": 703 + }, + "expenses": { + "living": 127.2, + "housing": 95.39999999999999, + "education": 47.699999999999996, + "tax": 31.8, + "event": 15.9 + }, + "totalExpense": 318.0, + "netCashFlow": 385.0, + "assetBalance": 3675.0 + }, + { + "year": 2031, + "age": 53, + "income": { + "total": 703 + }, + "expenses": { + "living": 129.6, + "housing": 97.2, + "education": 48.6, + "tax": 32.4, + "event": 16.2 + }, + "totalExpense": 324.0, + "netCashFlow": 379.0, + "assetBalance": 4164.0 + }, + { + "year": 2032, + "age": 54, + "income": { + "total": 703 + }, + "expenses": { + "living": 132.4, + "housing": 99.3, + "education": 49.65, + "tax": 33.1, + "event": 16.55 + }, + "totalExpense": 331.0, + "netCashFlow": 372.0, + "assetBalance": 4661.0 + }, + { + "year": 2033, + "age": 55, + "income": { + "total": 703 + }, + "expenses": { + "living": 134.8, + "housing": 101.1, + "education": 50.55, + "tax": 33.7, + "event": 16.85 + }, + "totalExpense": 337.0, + "netCashFlow": 366.0, + "assetBalance": 5166.0 + }, + { + "year": 2034, + "age": 56, + "income": { + "total": 703 + }, + "expenses": { + "living": 137.6, + "housing": 103.2, + "education": 51.6, + "tax": 34.4, + "event": 17.2 + }, + "totalExpense": 344.0, + "netCashFlow": 359.0, + "assetBalance": 5680.0 + }, + { + "year": 2035, + "age": 57, + "income": { + "total": 703 + }, + "expenses": { + "living": 140.4, + "housing": 105.3, + "education": 52.65, + "tax": 35.1, + "event": 17.55 + }, + "totalExpense": 351.0, + "netCashFlow": 352.0, + "assetBalance": 6203.0 + }, + { + "year": 2036, + "age": 58, + "income": { + "total": 703 + }, + "expenses": { + "living": 143.20000000000002, + "housing": 107.39999999999999, + "education": 53.699999999999996, + "tax": 35.800000000000004, + "event": 17.900000000000002 + }, + "totalExpense": 358.0, + "netCashFlow": 345.0, + "assetBalance": 6734.0 + }, + { + "year": 2037, + "age": 59, + "income": { + "total": 703 + }, + "expenses": { + "living": 146.0, + "housing": 109.5, + "education": 54.75, + "tax": 36.5, + "event": 18.25 + }, + "totalExpense": 365.0, + "netCashFlow": 338.0, + "assetBalance": 7273.0 + }, + { + "year": 2038, + "age": 60, + "income": { + "total": 0 + }, + "expenses": { + "living": 149.20000000000002, + "housing": 111.89999999999999, + "education": 55.949999999999996, + "tax": 37.300000000000004, + "event": 18.650000000000002 + }, + "totalExpense": 373.0, + "netCashFlow": -373.0, + "assetBalance": 7119.0 + }, + { + "year": 2039, + "age": 61, + "income": { + "total": 0 + }, + "expenses": { + "living": 152.0, + "housing": 114.0, + "education": 57.0, + "tax": 38.0, + "event": 19.0 + }, + "totalExpense": 380.0, + "netCashFlow": -380.0, + "assetBalance": 6953.0 + }, + { + "year": 2040, + "age": 62, + "income": { + "total": 0 + }, + "expenses": { + "living": 155.20000000000002, + "housing": 116.39999999999999, + "education": 58.199999999999996, + "tax": 38.800000000000004, + "event": 19.400000000000002 + }, + "totalExpense": 388.0, + "netCashFlow": -388.0, + "assetBalance": 6774.0 + }, + { + "year": 2041, + "age": 63, + "income": { + "total": 0 + }, + "expenses": { + "living": 158.0, + "housing": 118.5, + "education": 59.25, + "tax": 39.5, + "event": 19.75 + }, + "totalExpense": 395.0, + "netCashFlow": -395.0, + "assetBalance": 6581.0 + }, + { + "year": 2042, + "age": 64, + "income": { + "total": 0 + }, + "expenses": { + "living": 161.20000000000002, + "housing": 120.89999999999999, + "education": 60.449999999999996, + "tax": 40.300000000000004, + "event": 20.150000000000002 + }, + "totalExpense": 403.0, + "netCashFlow": -403.0, + "assetBalance": 6376.0 + }, + { + "year": 2043, + "age": 65, + "income": { + "total": 0 + }, + "expenses": { + "living": 164.4, + "housing": 123.3, + "education": 61.65, + "tax": 41.1, + "event": 20.55 + }, + "totalExpense": 411.0, + "netCashFlow": -411.0, + "assetBalance": 6155.0 + }, + { + "year": 2044, + "age": 66, + "income": { + "total": 0 + }, + "expenses": { + "living": 168.0, + "housing": 126.0, + "education": 63.0, + "tax": 42.0, + "event": 21.0 + }, + "totalExpense": 420.0, + "netCashFlow": -420.0, + "assetBalance": 5921.0 + }, + { + "year": 2045, + "age": 67, + "income": { + "total": 0 + }, + "expenses": { + "living": 171.20000000000002, + "housing": 128.4, + "education": 64.2, + "tax": 42.800000000000004, + "event": 21.400000000000002 + }, + "totalExpense": 428.0, + "netCashFlow": -428.0, + "assetBalance": 5670.0 + }, + { + "year": 2046, + "age": 68, + "income": { + "total": 0 + }, + "expenses": { + "living": 174.8, + "housing": 131.1, + "education": 65.55, + "tax": 43.7, + "event": 21.85 + }, + "totalExpense": 437.0, + "netCashFlow": -437.0, + "assetBalance": 5404.0 + }, + { + "year": 2047, + "age": 69, + "income": { + "total": 0 + }, + "expenses": { + "living": 178.0, + "housing": 133.5, + "education": 66.75, + "tax": 44.5, + "event": 22.25 + }, + "totalExpense": 445.0, + "netCashFlow": -445.0, + "assetBalance": 5121.0 + }, + { + "year": 2048, + "age": 70, + "income": { + "total": 0 + }, + "expenses": { + "living": 181.60000000000002, + "housing": 136.2, + "education": 68.1, + "tax": 45.400000000000006, + "event": 22.700000000000003 + }, + "totalExpense": 454.0, + "netCashFlow": -454.0, + "assetBalance": 4820.0 + }, + { + "year": 2049, + "age": 71, + "income": { + "total": 0 + }, + "expenses": { + "living": 185.20000000000002, + "housing": 138.9, + "education": 69.45, + "tax": 46.300000000000004, + "event": 23.150000000000002 + }, + "totalExpense": 463.0, + "netCashFlow": -463.0, + "assetBalance": 4502.0 + }, + { + "year": 2050, + "age": 72, + "income": { + "total": 0 + }, + "expenses": { + "living": 188.8, + "housing": 141.6, + "education": 70.8, + "tax": 47.2, + "event": 23.6 + }, + "totalExpense": 472.0, + "netCashFlow": -472.0, + "assetBalance": 4164.0 + }, + { + "year": 2051, + "age": 73, + "income": { + "total": 0 + }, + "expenses": { + "living": 192.8, + "housing": 144.6, + "education": 72.3, + "tax": 48.2, + "event": 24.1 + }, + "totalExpense": 482.0, + "netCashFlow": -482.0, + "assetBalance": 3807.0 + }, + { + "year": 2052, + "age": 74, + "income": { + "total": 0 + }, + "expenses": { + "living": 196.8, + "housing": 147.6, + "education": 73.8, + "tax": 49.2, + "event": 24.6 + }, + "totalExpense": 492.0, + "netCashFlow": -492.0, + "assetBalance": 3430.0 + }, + { + "year": 2053, + "age": 75, + "income": { + "total": 0 + }, + "expenses": { + "living": 200.4, + "housing": 150.29999999999998, + "education": 75.14999999999999, + "tax": 50.1, + "event": 25.05 + }, + "totalExpense": 501.0, + "netCashFlow": -501.0, + "assetBalance": 3031.0 + }, + { + "year": 2054, + "age": 76, + "income": { + "total": 0 + }, + "expenses": { + "living": 204.4, + "housing": 153.29999999999998, + "education": 76.64999999999999, + "tax": 51.1, + "event": 25.55 + }, + "totalExpense": 511.0, + "netCashFlow": -511.0, + "assetBalance": 2611.0 + }, + { + "year": 2055, + "age": 77, + "income": { + "total": 0 + }, + "expenses": { + "living": 208.8, + "housing": 156.6, + "education": 78.3, + "tax": 52.2, + "event": 26.1 + }, + "totalExpense": 522.0, + "netCashFlow": -522.0, + "assetBalance": 2167.0 + }, + { + "year": 2056, + "age": 78, + "income": { + "total": 0 + }, + "expenses": { + "living": 212.8, + "housing": 159.6, + "education": 79.8, + "tax": 53.2, + "event": 26.6 + }, + "totalExpense": 532.0, + "netCashFlow": -532.0, + "assetBalance": 1700.0 + }, + { + "year": 2057, + "age": 79, + "income": { + "total": 0 + }, + "expenses": { + "living": 217.20000000000002, + "housing": 162.9, + "education": 81.45, + "tax": 54.300000000000004, + "event": 27.150000000000002 + }, + "totalExpense": 543.0, + "netCashFlow": -543.0, + "assetBalance": 1209.0 + }, + { + "year": 2058, + "age": 80, + "income": { + "total": 0 + }, + "expenses": { + "living": 221.60000000000002, + "housing": 166.2, + "education": 83.1, + "tax": 55.400000000000006, + "event": 27.700000000000003 + }, + "totalExpense": 554.0, + "netCashFlow": -554.0, + "assetBalance": 691.0 + }, + { + "year": 2059, + "age": 81, + "income": { + "total": 0 + }, + "expenses": { + "living": 226.0, + "housing": 169.5, + "education": 84.75, + "tax": 56.5, + "event": 28.25 + }, + "totalExpense": 565.0, + "netCashFlow": -565.0, + "assetBalance": 147.0 + }, + { + "year": 2060, + "age": 82, + "income": { + "total": 0 + }, + "expenses": { + "living": 230.4, + "housing": 172.79999999999998, + "education": 86.39999999999999, + "tax": 57.6, + "event": 28.8 + }, + "totalExpense": 576.0, + "netCashFlow": -576.0, + "assetBalance": -424.0 + }, + { + "year": 2061, + "age": 83, + "income": { + "total": 0 + }, + "expenses": { + "living": 234.8, + "housing": 176.1, + "education": 88.05, + "tax": 58.7, + "event": 29.35 + }, + "totalExpense": 587.0, + "netCashFlow": -587.0, + "assetBalance": -1075.0 + }, + { + "year": 2062, + "age": 84, + "income": { + "total": 0 + }, + "expenses": { + "living": 239.60000000000002, + "housing": 179.7, + "education": 89.85, + "tax": 59.900000000000006, + "event": 29.950000000000003 + }, + "totalExpense": 599.0, + "netCashFlow": -599.0, + "assetBalance": -1836.0 + }, + { + "year": 2063, + "age": 85, + "income": { + "total": 0 + }, + "expenses": { + "living": 244.4, + "housing": 183.29999999999998, + "education": 91.64999999999999, + "tax": 61.1, + "event": 30.55 + }, + "totalExpense": 611.0, + "netCashFlow": -611.0, + "assetBalance": -2723.0 + }, + { + "year": 2064, + "age": 86, + "income": { + "total": 0 + }, + "expenses": { + "living": 249.20000000000002, + "housing": 186.9, + "education": 93.45, + "tax": 62.300000000000004, + "event": 31.150000000000002 + }, + "totalExpense": 623.0, + "netCashFlow": -623.0, + "assetBalance": -3754.0 + }, + { + "year": 2065, + "age": 87, + "income": { + "total": 0 + }, + "expenses": { + "living": 254.4, + "housing": 190.79999999999998, + "education": 95.39999999999999, + "tax": 63.6, + "event": 31.8 + }, + "totalExpense": 636.0, + "netCashFlow": -636.0, + "assetBalance": -4954.0 + }, + { + "year": 2066, + "age": 88, + "income": { + "total": 0 + }, + "expenses": { + "living": 259.6, + "housing": 194.7, + "education": 97.35, + "tax": 64.9, + "event": 32.45 + }, + "totalExpense": 649.0, + "netCashFlow": -649.0, + "assetBalance": -6345.0 + }, + { + "year": 2067, + "age": 89, + "income": { + "total": 0 + }, + "expenses": { + "living": 264.8, + "housing": 198.6, + "education": 99.3, + "tax": 66.2, + "event": 33.1 + }, + "totalExpense": 662.0, + "netCashFlow": -662.0, + "assetBalance": -7959.0 + }, + { + "year": 2068, + "age": 90, + "income": { + "total": 0 + }, + "expenses": { + "living": 270.0, + "housing": 202.5, + "education": 101.25, + "tax": 67.5, + "event": 33.75 + }, + "totalExpense": 675.0, + "netCashFlow": -675.0, + "assetBalance": -9827.0 + }, + { + "year": 2069, + "age": 91, + "income": { + "total": 0 + }, + "expenses": { + "living": 275.2, + "housing": 206.4, + "education": 103.2, + "tax": 68.8, + "event": 34.4 + }, + "totalExpense": 688.0, + "netCashFlow": -688.0, + "assetBalance": -11990.0 + }, + { + "year": 2070, + "age": 92, + "income": { + "total": 0 + }, + "expenses": { + "living": 280.8, + "housing": 210.6, + "education": 105.3, + "tax": 70.2, + "event": 35.1 + }, + "totalExpense": 702.0, + "netCashFlow": -702.0, + "assetBalance": -14490.0 + }, + { + "year": 2071, + "age": 93, + "income": { + "total": 0 + }, + "expenses": { + "living": 286.40000000000003, + "housing": 214.79999999999998, + "education": 107.39999999999999, + "tax": 71.60000000000001, + "event": 35.800000000000004 + }, + "totalExpense": 716.0, + "netCashFlow": -716.0, + "assetBalance": -17380.0 + }, + { + "year": 2072, + "age": 94, + "income": { + "total": 0 + }, + "expenses": { + "living": 292.0, + "housing": 219.0, + "education": 109.5, + "tax": 73.0, + "event": 36.5 + }, + "totalExpense": 730.0, + "netCashFlow": -730.0, + "assetBalance": -20717.0 + }, + { + "year": 2073, + "age": 95, + "income": { + "total": 0 + }, + "expenses": { + "living": 298.0, + "housing": 223.5, + "education": 111.75, + "tax": 74.5, + "event": 37.25 + }, + "totalExpense": 745.0, + "netCashFlow": -745.0, + "assetBalance": -24570.0 + }, + { + "year": 2074, + "age": 96, + "income": { + "total": 0 + }, + "expenses": { + "living": 304.0, + "housing": 228.0, + "education": 114.0, + "tax": 76.0, + "event": 38.0 + }, + "totalExpense": 760.0, + "netCashFlow": -760.0, + "assetBalance": -29015.0 + }, + { + "year": 2075, + "age": 97, + "income": { + "total": 0 + }, + "expenses": { + "living": 310.0, + "housing": 232.5, + "education": 116.25, + "tax": 77.5, + "event": 38.75 + }, + "totalExpense": 775.0, + "netCashFlow": -775.0, + "assetBalance": -34143.0 + }, + { + "year": 2076, + "age": 98, + "income": { + "total": 0 + }, + "expenses": { + "living": 316.40000000000003, + "housing": 237.29999999999998, + "education": 118.64999999999999, + "tax": 79.10000000000001, + "event": 39.550000000000004 + }, + "totalExpense": 791.0, + "netCashFlow": -791.0, + "assetBalance": -40055.0 + }, + { + "year": 2077, + "age": 99, + "income": { + "total": 0 + }, + "expenses": { + "living": 322.40000000000003, + "housing": 241.79999999999998, + "education": 120.89999999999999, + "tax": 80.60000000000001, + "event": 40.300000000000004 + }, + "totalExpense": 806.0, + "netCashFlow": -806.0, + "assetBalance": -46870.0 + }, + { + "year": 2078, + "age": 100, + "income": { + "total": 0 + }, + "expenses": { + "living": 329.20000000000005, + "housing": 246.89999999999998, + "education": 123.44999999999999, + "tax": 82.30000000000001, + "event": 41.150000000000006 + }, + "totalExpense": 823.0, + "netCashFlow": -823.0, + "assetBalance": -54723.0 + } + ], + "meta": { + "currencyUnit": "万円" + } + } + }, + "script": [ + { + "id": 1, + "text": "お客様のライフプランを提供するために、お客様の基本情報をお願いいたします。 すいませんが、お客様のお名前からお願いいたします。", + "insight": "ライフプランのヒアリング", + "targetYear": 2024, + "duration": 10.416, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "brollKeyword": "Japanese financial advisor consulting client", + "audioPath": "public\\segment_001.mp3", + "brollPath": "broll/Client Consulting_4486777.mp4" + }, + { + "id": 2, + "text": "はい、私がテスト太郎です", + "insight": "お客様の自己紹介", + "targetYear": 2024, + "duration": 8.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "brollKeyword": "Japanese man introduced himself", + "audioPath": "public/dialogue_clip_1.mp3", + "brollPath": "broll/Self-Introduction_7958453.mp4" + }, + { + "id": 3, + "text": "家族情報として、 生年月日の方は?", + "insight": "ライフプランのヒアリング", + "targetYear": 2024, + "duration": 3.024, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "brollKeyword": "Japanese advisor asking about family", + "audioPath": "public\\segment_003.mp3", + "brollPath": "broll/Advisor Inquiring_7844849.mp4" + }, + { + "id": 4, + "text": "1980年の1月の1日です。", + "insight": "生年月日の回答", + "targetYear": 2024, + "duration": 9.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "brollKeyword": "Asian man giving his birthday", + "audioPath": "public/dialogue_clip_2.mp3", + "brollPath": "broll/Giving Birthday_5529618.mp4" + }, + { + "id": 5, + "text": "ということは、47歳ということでよろしいでしょうか。", + "insight": "年齢の確認", + "targetYear": 2024, + "duration": 3.888, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "brollKeyword": "Japanese financial planner verifying age", + "audioPath": "public\\segment_005.mp3", + "brollPath": "broll/Verifying Age_6539952.mp4" + }, + { + "id": 6, + "text": "そうですね、はい。", + "insight": "年齢の确认", + "targetYear": 2024, + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "brollKeyword": "Asian man nodding in agreement", + "audioPath": "public/dialogue_clip_3.mp3", + "brollPath": "broll/Nodding In Agreement_4586579.mp4" + }, + { + "id": 7, + "text": "皆様、こんにちは!ライフプランニングを通じて、皆様の夢を叶えるお手伝いをさせていただきます。", + "insight": "オープニング", + "targetYear": 2024, + "duration": 7.08, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 0, + "brollKeyword": "Japanese businessman greeting warmly", + "audioPath": "public\\segment_007.mp3", + "brollPath": "broll/Warm Greeting_3304352.mp4" + }, + { + "id": 8, + "text": "本日は、テスト太郎様、花子様ご夫婦のライフプランについて一緒に考えていきたいと思います。", + "insight": "家族構成", + "targetYear": 2024, + "duration": 8.064, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 1, + "brollKeyword": "Japanese family sitting together", + "audioPath": "public\\segment_008.mp3", + "brollPath": "broll/Family Gathering_5856567.mp4" + }, + { + "id": 9, + "text": "太郎様は47歳、花子様は37歳でいらっしゃいますね。息子様の年齢は7歳で、小学校は公立とのこと。教育プランも中学校から私立をご検討されているんですね。", + "insight": "教育プラン", + "targetYear": 2024, + "duration": 14.28, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 1, + "brollKeyword": "Japanese student studying hard", + "audioPath": "public\\segment_009.mp3", + "brollPath": "broll/Studying Hard_7958453.mp4" + }, + { + "id": 10, + "text": "太郎様の年収は703万円、花子様の年収は368万円。合計で1071万円の収入がある一方で、年間支出は1038万円とのこと。現在の資産は852万円ですね。", + "insight": "家計の現状", + "targetYear": 2024, + "duration": 15.792, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 1, + "brollKeyword": "Japanese couple calculating budget", + "audioPath": "public\\segment_010.mp3", + "brollPath": "broll/Budgeting Couple_7958685.mp4" + }, + { + "id": 11, + "text": "次に、今後のライフイベントについて見ていきましょう。", + "insight": "ライフイベント", + "targetYear": 2024, + "duration": 4.2, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 2, + "brollKeyword": "Japanese calendar with events marked", + "audioPath": "public\\segment_011.mp3", + "brollPath": "broll/Marked Calendar_9057559.mp4" + }, + { + "id": 12, + "text": "2029年には車の交換、2032年には息子様が私立中学校へ入学されます。結婚記念日の海外旅行やリフォーム工事も予定されていますね。2053年で住宅ローンが完済するのは素晴らしいですね。", + "insight": "イベントの詳細", + "targetYear": 2030, + "duration": 18.192, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 2, + "brollKeyword": "Japanese family visiting a new car", + "audioPath": "public\\segment_012.mp3", + "brollPath": "broll/Car Shopping_31980658.mp4" + }, + { + "id": 13, + "text": "将来に対する不安について、インタビューでこのように語られていました。", + "insight": "お客様の声", + "targetYear": 2024, + "duration": 5.005, + "type": "narration", + "visualType": "video", + "visualAssetIndex": 0, + "brollKeyword": "Japanese man talking in interview", + "brollPath": "broll/Interview Talking_4428754.mp4" + }, + { + "id": 14, + "text": "将来に対する不安について、インタビューでこのように語られていました。", + "insight": "お客様の声", + "targetYear": 2024, + "duration": 5.005, + "type": "narration", + "visualType": "video", + "visualAssetIndex": 1, + "brollKeyword": "Japanese man explaining feelings", + "brollPath": "broll/Expressing Feelings_7957918.mp4" + }, + { + "id": 15, + "text": "それでは、今後の資産推移をシミュレーションで見てみましょう。", + "insight": "シミュレーション", + "targetYear": 2024, + "duration": 5.352, + "type": "narration", + "visualType": "chart", + "visualAssetIndex": null, + "brollKeyword": "Japanese financial consultant showing graphs", + "audioPath": "public\\segment_015.mp3", + "brollPath": "broll/Showing Graphs_7844858.mp4" + }, + { + "id": 16, + "text": "このグラフは、現在の収入と支出、和将来のライフイベントを考慮した上で、資産がどのように推移していくかを予測したものです。60歳で退職されると、一時的に資産が減少しますが、年金受給開始後は安定していく見込みです。", + "insight": "資産推移", + "targetYear": 2040, + "duration": 18.912, + "type": "narration", + "visualType": "chart", + "visualAssetIndex": null, + "brollKeyword": "Japanese retired couple smiling", + "audioPath": "public\\segment_016.mp3", + "brollPath": "broll/Smiling Retirees_6761158.mp4" + }, + { + "id": 17, + "text": "このライフプランレポートは、お客様の将来設計をサポートするために作成されましたが、現状の保険内容がライフプランに合っているか、家計に無理がないかを確認することが重要です。もし、保障内容が過剰であったり、逆に不足している場合は、保険の見直しを検討しましょう。また、家計の見直しを行い、無駄な支出を削減することも大切です。", + "insight": "保険の見直しと家計の最適化は、安心できる将来設計の基盤となります。", + "targetYear": 2024, + "duration": 28.968, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 5, + "brollKeyword": "Japanese financial advisor explaining report", + "audioPath": "public\\segment_017.mp3" + }, + { + "id": 18, + "text": "将来の資産形成のためには、NISAやiDeCoなどの制度を活用することも有効です。これらの制度は税制優遇があり、効率的に資産を形成することができます。ご自身のライフプランに合わせて、最適な制度を選択し、積極的に活用しましょう。", + "insight": "NISAやiDeCoは、税制優遇を活用した効果的な資産形成手段です。", + "targetYear": 2024, + "duration": 19.584, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 5, + "brollKeyword": "Japanese financial advisor explaining report", + "audioPath": "public\\segment_018.mp3" + }, + { + "id": 19, + "text": "将来に不安を感じることは誰にでもありますが、大切なのは、将来に向けて具体的な対策を講じることです。今回のライフプランレポートを参考に、ご自身の将来設計について改めて考えてみましょう。そして、もし何か不安なことや疑問点があれば、お気軽に担当者にご相談ください。専門家として、お客様の状況に合わせた最適なアドバイスをさせていただきます。", + "insight": "将来への漠然とした不安を解消するには、具体的な行動が不可欠です。", + "targetYear": 2024, + "duration": 30.048, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 5, + "brollKeyword": "Japanese financial advisor explaining report", + "audioPath": "public\\segment_019.mp3" + }, + { + "id": 20, + "text": "本日はありがとうございました。テスト太郎様ご家族の幸せな未来を心より応援しております。より詳細なご相談は個別相談にて承ります。お待ちしております。", + "insight": "本日はありがとうございました!", + "targetYear": 2024, + "duration": 13.368, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 6, + "brollKeyword": "Japanese business team smiling", + "audioPath": "public\\segment_020.mp3" + } + ], + "assets": { + "broll": { + "Japanese family sitting together": "Family Gathering_5856567.mp4", + "Japanese couple calculating budget": "Budgeting Couple_7958685.mp4", + "Japanese man explaining feelings": "Expressing Feelings_7957918.mp4", + "Asian man nodding in agreement": "Nodding In Agreement_4586579.mp4", + "Japanese retired couple smiling": "Smiling Retirees_6761158.mp4", + "Japanese family visiting a new car": "Car Shopping_31980658.mp4", + "Japanese consultant pointing at document": "Consultant Pointing_7844849.mp4", + "Japanese advisor asking about family": "Advisor Inquiring_7844849.mp4", + "Asian man giving his birthday": "Giving Birthday_5529618.mp4", + "Japanese businessman greeting warmly": "Warm Greeting_3304352.mp4", + "Japanese student studying hard": "Studying Hard_7958453.mp4", + "Japanese calendar with events marked": "Marked Calendar_9057559.mp4", + "Japanese financial planner verifying age": "Verifying Age_6539952.mp4", + "Japanese advisor bowing politely": "Polite Bowing_7958678.mp4", + "Japanese man introduced himself": "Self-Introduction_7958453.mp4", + "Japanese financial consultant showing graphs": "Showing Graphs_7844858.mp4", + "Japanese financial advisor consulting client": "Client Consulting_4486777.mp4", + "Japanese man talking in interview": "Interview Talking_4428754.mp4" + }, + "videoClips": [ + { + "id": "clip_1", + "outputPath": "public\\clip_1_13.0-18.0.mp4", + "filepath": "public\\clip_1_13.0-18.0.mp4", + "start": 13.0, + "end": 18.0, + "duration": 5.0, + "description": "すいませんが、お客様のお名前からお願いいたします。\nはい、私がテストテロとして、家族情報として、\n生年月日の方は?\nはい、生年月日の方は、1980年の1月の1日です。" + }, + { + "id": "clip_2", + "outputPath": "public\\clip_2_52.0-57.0.mp4", + "filepath": "public\\clip_2_52.0-57.0.mp4", + "start": 52.0, + "end": 57.0, + "duration": 5.0, + "description": "すいませんが、前代の、ざっくりでよろしいので、年収はどのくらいになりますでしょうか。\n年収が今700万くらいですね。" + }, + { + "id": "clip_3", + "outputPath": "public\\clip_3_71.0-76.0.mp4", + "filepath": "public\\clip_3_71.0-76.0.mp4", + "start": 71.0, + "end": 76.0, + "duration": 5.0, + "description": "下の名前だけでいいので、奥様のお名前をお願いいたします。\n花子です。\nはい。奥様の生年月日を教えていただけますか。\n1990年の1月の10日です。" + } + ], + "slides": [ + { + "index": 0, + "title": "ライフプラン", + "image_path": "public/slide_001.png" + }, + { + "index": 1, + "title": "2", + "image_path": "public/slide_002.png" + }, + { + "index": 2, + "title": "3", + "image_path": "public/slide_003.png" + }, + { + "index": 3, + "title": "4", + "image_path": "public/slide_004.png" + }, + { + "index": 4, + "title": "5", + "image_path": "public/slide_005.png" + }, + { + "index": 5, + "title": "6", + "image_path": "public/slide_006.png" + }, + { + "index": 6, + "title": "7", + "image_path": "public/slide_007.png" + } + ] + } +} \ No newline at end of file diff --git a/assets/1_processed/render_props_combined.json b/assets/1_processed/render_props_combined.json new file mode 100644 index 0000000..921ff61 --- /dev/null +++ b/assets/1_processed/render_props_combined.json @@ -0,0 +1,1859 @@ +{ + "meta": { + "title": "【総合解説】テスト太郎様のライフプラン", + "currencyUnit": "万円", + "duration": 149.712, + "clientName": "テスト太郎" + }, + "charts": { + "assetDepletion": { + "timeline": [ + { + "year": 2025, + "ages": { + "rep": 47, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 288.0, + "assetBalance": 1349.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2026, + "ages": { + "rep": 48, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 294.0, + "assetBalance": 1799.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2027, + "ages": { + "rep": 49, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 300.0, + "assetBalance": 2256.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2028, + "ages": { + "rep": 50, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 306.0, + "assetBalance": 2721.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2029, + "ages": { + "rep": 51, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 312.0, + "assetBalance": 3194.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2030, + "ages": { + "rep": 52, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 318.0, + "assetBalance": 3675.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2031, + "ages": { + "rep": 53, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 324.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2032, + "ages": { + "rep": 54, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 331.0, + "assetBalance": 4661.0 + }, + "events": [ + "Event", + "Event" + ], + "isCritical": false + }, + { + "year": 2033, + "ages": { + "rep": 55, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 337.0, + "assetBalance": 5166.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2034, + "ages": { + "rep": 56, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 344.0, + "assetBalance": 5680.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2035, + "ages": { + "rep": 57, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 351.0, + "assetBalance": 6203.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2036, + "ages": { + "rep": 58, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 358.0, + "assetBalance": 6734.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2037, + "ages": { + "rep": 59, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 365.0, + "assetBalance": 7273.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2038, + "ages": { + "rep": 60, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 373.0, + "assetBalance": 7119.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2039, + "ages": { + "rep": 61, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 380.0, + "assetBalance": 6953.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2040, + "ages": { + "rep": 62, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 388.0, + "assetBalance": 6774.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2041, + "ages": { + "rep": 63, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 395.0, + "assetBalance": 6581.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2042, + "ages": { + "rep": 64, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 403.0, + "assetBalance": 6376.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2043, + "ages": { + "rep": 65, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 411.0, + "assetBalance": 6155.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2044, + "ages": { + "rep": 66, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 420.0, + "assetBalance": 5921.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2045, + "ages": { + "rep": 67, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 428.0, + "assetBalance": 5670.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2046, + "ages": { + "rep": 68, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 437.0, + "assetBalance": 5404.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2047, + "ages": { + "rep": 69, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 445.0, + "assetBalance": 5121.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2048, + "ages": { + "rep": 70, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 454.0, + "assetBalance": 4820.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2049, + "ages": { + "rep": 71, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 463.0, + "assetBalance": 4502.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2050, + "ages": { + "rep": 72, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 472.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2051, + "ages": { + "rep": 73, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 482.0, + "assetBalance": 3807.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2052, + "ages": { + "rep": 74, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 492.0, + "assetBalance": 3430.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2053, + "ages": { + "rep": 75, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 501.0, + "assetBalance": 3031.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2054, + "ages": { + "rep": 76, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 511.0, + "assetBalance": 2611.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2055, + "ages": { + "rep": 77, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 522.0, + "assetBalance": 2167.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2056, + "ages": { + "rep": 78, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 532.0, + "assetBalance": 1700.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2057, + "ages": { + "rep": 79, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 543.0, + "assetBalance": 1209.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2058, + "ages": { + "rep": 80, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 554.0, + "assetBalance": 691.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2059, + "ages": { + "rep": 81, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 565.0, + "assetBalance": 147.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2060, + "ages": { + "rep": 82, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 576.0, + "assetBalance": -424.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2061, + "ages": { + "rep": 83, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 587.0, + "assetBalance": -1075.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2062, + "ages": { + "rep": 84, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 599.0, + "assetBalance": -1836.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2063, + "ages": { + "rep": 85, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 611.0, + "assetBalance": -2723.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2064, + "ages": { + "rep": 86, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 623.0, + "assetBalance": -3754.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2065, + "ages": { + "rep": 87, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 636.0, + "assetBalance": -4954.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2066, + "ages": { + "rep": 88, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 649.0, + "assetBalance": -6345.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2067, + "ages": { + "rep": 89, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 662.0, + "assetBalance": -7959.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2068, + "ages": { + "rep": 90, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 675.0, + "assetBalance": -9827.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2069, + "ages": { + "rep": 91, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 688.0, + "assetBalance": -11990.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2070, + "ages": { + "rep": 92, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 702.0, + "assetBalance": -14490.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2071, + "ages": { + "rep": 93, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 716.0, + "assetBalance": -17380.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2072, + "ages": { + "rep": 94, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 730.0, + "assetBalance": -20717.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2073, + "ages": { + "rep": 95, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 745.0, + "assetBalance": -24570.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2074, + "ages": { + "rep": 96, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 760.0, + "assetBalance": -29015.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2075, + "ages": { + "rep": 97, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 775.0, + "assetBalance": -34143.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2076, + "ages": { + "rep": 98, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 791.0, + "assetBalance": -40055.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2077, + "ages": { + "rep": 99, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 806.0, + "assetBalance": -46870.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2078, + "ages": { + "rep": 100, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 823.0, + "assetBalance": -54723.0 + }, + "events": [], + "isCritical": true + } + ], + "meta": { + "currencyUnit": "万円", + "startYear": 2025 + } + }, + "cashFlow": { + "timeline": [ + { + "year": 2025, + "age": 47, + "income": { + "total": 703 + }, + "expenses": { + "living": 115.2, + "housing": 86.39999999999999, + "education": 43.199999999999996, + "tax": 28.8, + "event": 14.4 + }, + "totalExpense": 288.0, + "netCashFlow": 415.0, + "assetBalance": 1349.0 + }, + { + "year": 2026, + "age": 48, + "income": { + "total": 703 + }, + "expenses": { + "living": 117.60000000000001, + "housing": 88.2, + "education": 44.1, + "tax": 29.400000000000002, + "event": 14.700000000000001 + }, + "totalExpense": 294.0, + "netCashFlow": 409.0, + "assetBalance": 1799.0 + }, + { + "year": 2027, + "age": 49, + "income": { + "total": 703 + }, + "expenses": { + "living": 120.0, + "housing": 90.0, + "education": 45.0, + "tax": 30.0, + "event": 15.0 + }, + "totalExpense": 300.0, + "netCashFlow": 403.0, + "assetBalance": 2256.0 + }, + { + "year": 2028, + "age": 50, + "income": { + "total": 703 + }, + "expenses": { + "living": 122.4, + "housing": 91.8, + "education": 45.9, + "tax": 30.6, + "event": 15.3 + }, + "totalExpense": 306.0, + "netCashFlow": 397.0, + "assetBalance": 2721.0 + }, + { + "year": 2029, + "age": 51, + "income": { + "total": 703 + }, + "expenses": { + "living": 124.80000000000001, + "housing": 93.6, + "education": 46.8, + "tax": 31.200000000000003, + "event": 15.600000000000001 + }, + "totalExpense": 312.0, + "netCashFlow": 391.0, + "assetBalance": 3194.0 + }, + { + "year": 2030, + "age": 52, + "income": { + "total": 703 + }, + "expenses": { + "living": 127.2, + "housing": 95.39999999999999, + "education": 47.699999999999996, + "tax": 31.8, + "event": 15.9 + }, + "totalExpense": 318.0, + "netCashFlow": 385.0, + "assetBalance": 3675.0 + }, + { + "year": 2031, + "age": 53, + "income": { + "total": 703 + }, + "expenses": { + "living": 129.6, + "housing": 97.2, + "education": 48.6, + "tax": 32.4, + "event": 16.2 + }, + "totalExpense": 324.0, + "netCashFlow": 379.0, + "assetBalance": 4164.0 + }, + { + "year": 2032, + "age": 54, + "income": { + "total": 703 + }, + "expenses": { + "living": 132.4, + "housing": 99.3, + "education": 49.65, + "tax": 33.1, + "event": 16.55 + }, + "totalExpense": 331.0, + "netCashFlow": 372.0, + "assetBalance": 4661.0 + }, + { + "year": 2033, + "age": 55, + "income": { + "total": 703 + }, + "expenses": { + "living": 134.8, + "housing": 101.1, + "education": 50.55, + "tax": 33.7, + "event": 16.85 + }, + "totalExpense": 337.0, + "netCashFlow": 366.0, + "assetBalance": 5166.0 + }, + { + "year": 2034, + "age": 56, + "income": { + "total": 703 + }, + "expenses": { + "living": 137.6, + "housing": 103.2, + "education": 51.6, + "tax": 34.4, + "event": 17.2 + }, + "totalExpense": 344.0, + "netCashFlow": 359.0, + "assetBalance": 5680.0 + }, + { + "year": 2035, + "age": 57, + "income": { + "total": 703 + }, + "expenses": { + "living": 140.4, + "housing": 105.3, + "education": 52.65, + "tax": 35.1, + "event": 17.55 + }, + "totalExpense": 351.0, + "netCashFlow": 352.0, + "assetBalance": 6203.0 + }, + { + "year": 2036, + "age": 58, + "income": { + "total": 703 + }, + "expenses": { + "living": 143.20000000000002, + "housing": 107.39999999999999, + "education": 53.699999999999996, + "tax": 35.800000000000004, + "event": 17.900000000000002 + }, + "totalExpense": 358.0, + "netCashFlow": 345.0, + "assetBalance": 6734.0 + }, + { + "year": 2037, + "age": 59, + "income": { + "total": 703 + }, + "expenses": { + "living": 146.0, + "housing": 109.5, + "education": 54.75, + "tax": 36.5, + "event": 18.25 + }, + "totalExpense": 365.0, + "netCashFlow": 338.0, + "assetBalance": 7273.0 + }, + { + "year": 2038, + "age": 60, + "income": { + "total": 0 + }, + "expenses": { + "living": 149.20000000000002, + "housing": 111.89999999999999, + "education": 55.949999999999996, + "tax": 37.300000000000004, + "event": 18.650000000000002 + }, + "totalExpense": 373.0, + "netCashFlow": -373.0, + "assetBalance": 7119.0 + }, + { + "year": 2039, + "age": 61, + "income": { + "total": 0 + }, + "expenses": { + "living": 152.0, + "housing": 114.0, + "education": 57.0, + "tax": 38.0, + "event": 19.0 + }, + "totalExpense": 380.0, + "netCashFlow": -380.0, + "assetBalance": 6953.0 + }, + { + "year": 2040, + "age": 62, + "income": { + "total": 0 + }, + "expenses": { + "living": 155.20000000000002, + "housing": 116.39999999999999, + "education": 58.199999999999996, + "tax": 38.800000000000004, + "event": 19.400000000000002 + }, + "totalExpense": 388.0, + "netCashFlow": -388.0, + "assetBalance": 6774.0 + }, + { + "year": 2041, + "age": 63, + "income": { + "total": 0 + }, + "expenses": { + "living": 158.0, + "housing": 118.5, + "education": 59.25, + "tax": 39.5, + "event": 19.75 + }, + "totalExpense": 395.0, + "netCashFlow": -395.0, + "assetBalance": 6581.0 + }, + { + "year": 2042, + "age": 64, + "income": { + "total": 0 + }, + "expenses": { + "living": 161.20000000000002, + "housing": 120.89999999999999, + "education": 60.449999999999996, + "tax": 40.300000000000004, + "event": 20.150000000000002 + }, + "totalExpense": 403.0, + "netCashFlow": -403.0, + "assetBalance": 6376.0 + }, + { + "year": 2043, + "age": 65, + "income": { + "total": 0 + }, + "expenses": { + "living": 164.4, + "housing": 123.3, + "education": 61.65, + "tax": 41.1, + "event": 20.55 + }, + "totalExpense": 411.0, + "netCashFlow": -411.0, + "assetBalance": 6155.0 + }, + { + "year": 2044, + "age": 66, + "income": { + "total": 0 + }, + "expenses": { + "living": 168.0, + "housing": 126.0, + "education": 63.0, + "tax": 42.0, + "event": 21.0 + }, + "totalExpense": 420.0, + "netCashFlow": -420.0, + "assetBalance": 5921.0 + }, + { + "year": 2045, + "age": 67, + "income": { + "total": 0 + }, + "expenses": { + "living": 171.20000000000002, + "housing": 128.4, + "education": 64.2, + "tax": 42.800000000000004, + "event": 21.400000000000002 + }, + "totalExpense": 428.0, + "netCashFlow": -428.0, + "assetBalance": 5670.0 + }, + { + "year": 2046, + "age": 68, + "income": { + "total": 0 + }, + "expenses": { + "living": 174.8, + "housing": 131.1, + "education": 65.55, + "tax": 43.7, + "event": 21.85 + }, + "totalExpense": 437.0, + "netCashFlow": -437.0, + "assetBalance": 5404.0 + }, + { + "year": 2047, + "age": 69, + "income": { + "total": 0 + }, + "expenses": { + "living": 178.0, + "housing": 133.5, + "education": 66.75, + "tax": 44.5, + "event": 22.25 + }, + "totalExpense": 445.0, + "netCashFlow": -445.0, + "assetBalance": 5121.0 + }, + { + "year": 2048, + "age": 70, + "income": { + "total": 0 + }, + "expenses": { + "living": 181.60000000000002, + "housing": 136.2, + "education": 68.1, + "tax": 45.400000000000006, + "event": 22.700000000000003 + }, + "totalExpense": 454.0, + "netCashFlow": -454.0, + "assetBalance": 4820.0 + }, + { + "year": 2049, + "age": 71, + "income": { + "total": 0 + }, + "expenses": { + "living": 185.20000000000002, + "housing": 138.9, + "education": 69.45, + "tax": 46.300000000000004, + "event": 23.150000000000002 + }, + "totalExpense": 463.0, + "netCashFlow": -463.0, + "assetBalance": 4502.0 + }, + { + "year": 2050, + "age": 72, + "income": { + "total": 0 + }, + "expenses": { + "living": 188.8, + "housing": 141.6, + "education": 70.8, + "tax": 47.2, + "event": 23.6 + }, + "totalExpense": 472.0, + "netCashFlow": -472.0, + "assetBalance": 4164.0 + }, + { + "year": 2051, + "age": 73, + "income": { + "total": 0 + }, + "expenses": { + "living": 192.8, + "housing": 144.6, + "education": 72.3, + "tax": 48.2, + "event": 24.1 + }, + "totalExpense": 482.0, + "netCashFlow": -482.0, + "assetBalance": 3807.0 + }, + { + "year": 2052, + "age": 74, + "income": { + "total": 0 + }, + "expenses": { + "living": 196.8, + "housing": 147.6, + "education": 73.8, + "tax": 49.2, + "event": 24.6 + }, + "totalExpense": 492.0, + "netCashFlow": -492.0, + "assetBalance": 3430.0 + }, + { + "year": 2053, + "age": 75, + "income": { + "total": 0 + }, + "expenses": { + "living": 200.4, + "housing": 150.29999999999998, + "education": 75.14999999999999, + "tax": 50.1, + "event": 25.05 + }, + "totalExpense": 501.0, + "netCashFlow": -501.0, + "assetBalance": 3031.0 + }, + { + "year": 2054, + "age": 76, + "income": { + "total": 0 + }, + "expenses": { + "living": 204.4, + "housing": 153.29999999999998, + "education": 76.64999999999999, + "tax": 51.1, + "event": 25.55 + }, + "totalExpense": 511.0, + "netCashFlow": -511.0, + "assetBalance": 2611.0 + }, + { + "year": 2055, + "age": 77, + "income": { + "total": 0 + }, + "expenses": { + "living": 208.8, + "housing": 156.6, + "education": 78.3, + "tax": 52.2, + "event": 26.1 + }, + "totalExpense": 522.0, + "netCashFlow": -522.0, + "assetBalance": 2167.0 + }, + { + "year": 2056, + "age": 78, + "income": { + "total": 0 + }, + "expenses": { + "living": 212.8, + "housing": 159.6, + "education": 79.8, + "tax": 53.2, + "event": 26.6 + }, + "totalExpense": 532.0, + "netCashFlow": -532.0, + "assetBalance": 1700.0 + }, + { + "year": 2057, + "age": 79, + "income": { + "total": 0 + }, + "expenses": { + "living": 217.20000000000002, + "housing": 162.9, + "education": 81.45, + "tax": 54.300000000000004, + "event": 27.150000000000002 + }, + "totalExpense": 543.0, + "netCashFlow": -543.0, + "assetBalance": 1209.0 + }, + { + "year": 2058, + "age": 80, + "income": { + "total": 0 + }, + "expenses": { + "living": 221.60000000000002, + "housing": 166.2, + "education": 83.1, + "tax": 55.400000000000006, + "event": 27.700000000000003 + }, + "totalExpense": 554.0, + "netCashFlow": -554.0, + "assetBalance": 691.0 + }, + { + "year": 2059, + "age": 81, + "income": { + "total": 0 + }, + "expenses": { + "living": 226.0, + "housing": 169.5, + "education": 84.75, + "tax": 56.5, + "event": 28.25 + }, + "totalExpense": 565.0, + "netCashFlow": -565.0, + "assetBalance": 147.0 + }, + { + "year": 2060, + "age": 82, + "income": { + "total": 0 + }, + "expenses": { + "living": 230.4, + "housing": 172.79999999999998, + "education": 86.39999999999999, + "tax": 57.6, + "event": 28.8 + }, + "totalExpense": 576.0, + "netCashFlow": -576.0, + "assetBalance": -424.0 + }, + { + "year": 2061, + "age": 83, + "income": { + "total": 0 + }, + "expenses": { + "living": 234.8, + "housing": 176.1, + "education": 88.05, + "tax": 58.7, + "event": 29.35 + }, + "totalExpense": 587.0, + "netCashFlow": -587.0, + "assetBalance": -1075.0 + }, + { + "year": 2062, + "age": 84, + "income": { + "total": 0 + }, + "expenses": { + "living": 239.60000000000002, + "housing": 179.7, + "education": 89.85, + "tax": 59.900000000000006, + "event": 29.950000000000003 + }, + "totalExpense": 599.0, + "netCashFlow": -599.0, + "assetBalance": -1836.0 + }, + { + "year": 2063, + "age": 85, + "income": { + "total": 0 + }, + "expenses": { + "living": 244.4, + "housing": 183.29999999999998, + "education": 91.64999999999999, + "tax": 61.1, + "event": 30.55 + }, + "totalExpense": 611.0, + "netCashFlow": -611.0, + "assetBalance": -2723.0 + }, + { + "year": 2064, + "age": 86, + "income": { + "total": 0 + }, + "expenses": { + "living": 249.20000000000002, + "housing": 186.9, + "education": 93.45, + "tax": 62.300000000000004, + "event": 31.150000000000002 + }, + "totalExpense": 623.0, + "netCashFlow": -623.0, + "assetBalance": -3754.0 + }, + { + "year": 2065, + "age": 87, + "income": { + "total": 0 + }, + "expenses": { + "living": 254.4, + "housing": 190.79999999999998, + "education": 95.39999999999999, + "tax": 63.6, + "event": 31.8 + }, + "totalExpense": 636.0, + "netCashFlow": -636.0, + "assetBalance": -4954.0 + }, + { + "year": 2066, + "age": 88, + "income": { + "total": 0 + }, + "expenses": { + "living": 259.6, + "housing": 194.7, + "education": 97.35, + "tax": 64.9, + "event": 32.45 + }, + "totalExpense": 649.0, + "netCashFlow": -649.0, + "assetBalance": -6345.0 + }, + { + "year": 2067, + "age": 89, + "income": { + "total": 0 + }, + "expenses": { + "living": 264.8, + "housing": 198.6, + "education": 99.3, + "tax": 66.2, + "event": 33.1 + }, + "totalExpense": 662.0, + "netCashFlow": -662.0, + "assetBalance": -7959.0 + }, + { + "year": 2068, + "age": 90, + "income": { + "total": 0 + }, + "expenses": { + "living": 270.0, + "housing": 202.5, + "education": 101.25, + "tax": 67.5, + "event": 33.75 + }, + "totalExpense": 675.0, + "netCashFlow": -675.0, + "assetBalance": -9827.0 + }, + { + "year": 2069, + "age": 91, + "income": { + "total": 0 + }, + "expenses": { + "living": 275.2, + "housing": 206.4, + "education": 103.2, + "tax": 68.8, + "event": 34.4 + }, + "totalExpense": 688.0, + "netCashFlow": -688.0, + "assetBalance": -11990.0 + }, + { + "year": 2070, + "age": 92, + "income": { + "total": 0 + }, + "expenses": { + "living": 280.8, + "housing": 210.6, + "education": 105.3, + "tax": 70.2, + "event": 35.1 + }, + "totalExpense": 702.0, + "netCashFlow": -702.0, + "assetBalance": -14490.0 + }, + { + "year": 2071, + "age": 93, + "income": { + "total": 0 + }, + "expenses": { + "living": 286.40000000000003, + "housing": 214.79999999999998, + "education": 107.39999999999999, + "tax": 71.60000000000001, + "event": 35.800000000000004 + }, + "totalExpense": 716.0, + "netCashFlow": -716.0, + "assetBalance": -17380.0 + }, + { + "year": 2072, + "age": 94, + "income": { + "total": 0 + }, + "expenses": { + "living": 292.0, + "housing": 219.0, + "education": 109.5, + "tax": 73.0, + "event": 36.5 + }, + "totalExpense": 730.0, + "netCashFlow": -730.0, + "assetBalance": -20717.0 + }, + { + "year": 2073, + "age": 95, + "income": { + "total": 0 + }, + "expenses": { + "living": 298.0, + "housing": 223.5, + "education": 111.75, + "tax": 74.5, + "event": 37.25 + }, + "totalExpense": 745.0, + "netCashFlow": -745.0, + "assetBalance": -24570.0 + }, + { + "year": 2074, + "age": 96, + "income": { + "total": 0 + }, + "expenses": { + "living": 304.0, + "housing": 228.0, + "education": 114.0, + "tax": 76.0, + "event": 38.0 + }, + "totalExpense": 760.0, + "netCashFlow": -760.0, + "assetBalance": -29015.0 + }, + { + "year": 2075, + "age": 97, + "income": { + "total": 0 + }, + "expenses": { + "living": 310.0, + "housing": 232.5, + "education": 116.25, + "tax": 77.5, + "event": 38.75 + }, + "totalExpense": 775.0, + "netCashFlow": -775.0, + "assetBalance": -34143.0 + }, + { + "year": 2076, + "age": 98, + "income": { + "total": 0 + }, + "expenses": { + "living": 316.40000000000003, + "housing": 237.29999999999998, + "education": 118.64999999999999, + "tax": 79.10000000000001, + "event": 39.550000000000004 + }, + "totalExpense": 791.0, + "netCashFlow": -791.0, + "assetBalance": -40055.0 + }, + { + "year": 2077, + "age": 99, + "income": { + "total": 0 + }, + "expenses": { + "living": 322.40000000000003, + "housing": 241.79999999999998, + "education": 120.89999999999999, + "tax": 80.60000000000001, + "event": 40.300000000000004 + }, + "totalExpense": 806.0, + "netCashFlow": -806.0, + "assetBalance": -46870.0 + }, + { + "year": 2078, + "age": 100, + "income": { + "total": 0 + }, + "expenses": { + "living": 329.20000000000005, + "housing": 246.89999999999998, + "education": 123.44999999999999, + "tax": 82.30000000000001, + "event": 41.150000000000006 + }, + "totalExpense": 823.0, + "netCashFlow": -823.0, + "assetBalance": -54723.0 + } + ], + "meta": { + "currencyUnit": "万円" + } + } + }, + "script": [ + { + "id": "intro", + "text": "皆様、こんにちは!ファイナンシャルプランナーの[あなたの名前]です。本日は、テスト太郎様ご家族のライフプランについて、詳しく解説していきます。", + "duration": 11.184, + "visualType": "ppt", + "slideIndex": 0, + "highlightArea": "full", + "audioPath": "public/combined_narration/narration_intro.mp3" + }, + { + "id": "family_info", + "text": "まずは、ご家族構成から見ていきましょう。テスト太郎様は47歳で、情報通信業にお勤め、年収は703万円です。奥様の花子様は37歳で、卸売・小売業にお勤め、年収は368万円。そして、7歳になる息子さんがいらっしゃいます。現在の資産は836万円、年間支出は1038万円とのことです。", + "duration": 26.208, + "visualType": "ppt", + "slideIndex": 1, + "highlightArea": "full", + "audioPath": "public/combined_narration/narration_family_info.mp3" + }, + { + "id": "life_events", + "text": "次に、今後のライフイベントについて確認しましょう。2029年に車の買い替え、2032年には息子さんが私立中学校へ入学されます。その後も、高校入学、海外旅行、リフォーム工事、大学入学とイベントが続きます。太郎様は2039年に定年退職を迎えられ、2044年から年金を受け取り始める予定です。花子様は2049年に定年、2050年には息子さんの結婚というライフイベントが予定されています。", + "duration": 35.28, + "visualType": "ppt", + "slideIndex": 2, + "highlightArea": "full", + "audioPath": "public/combined_narration/narration_life_events.mp3" + }, + { + "id": "financial_intro", + "text": "これらのライフイベントを踏まえ、今後の資産推移がどうなっていくのか、詳しく見ていきましょう。現状の資産と収入、支出から将来を予測していきます。", + "duration": 12.672, + "visualType": "ppt", + "slideIndex": 4, + "highlightArea": "full", + "audioPath": "public/combined_narration/narration_financial_intro.mp3" + }, + { + "id": "chart_analysis", + "text": "こちらが、将来の資産推移をグラフで表したものです。現状維持のままでは、[グラフから読み取れる具体的な問題点]という課題が見えてきます。例えば、[具体的な年齢]頃に資金が不足する可能性があります。この原因は、[原因を具体的に説明]などが考えられます。", + "duration": 22.344, + "visualType": "chart", + "slideIndex": 5, + "highlightArea": "full", + "audioPath": "public/combined_narration/narration_chart_analysis.mp3" + }, + { + "id": "education_plan", + "text": "特に重要なのが、教育資金の準備です。息子さんの私立中学校、高校、そして大学進学と、まとまった資金が必要になります。早めに計画を立て、無理のない範囲で積み立てていくことが大切です。具体的な積立方法としては、[提案する積立方法]などが考えられます。", + "duration": 22.296, + "visualType": "ppt", + "slideIndex": 6, + "highlightArea": "full", + "audioPath": "public/combined_narration/narration_education_plan.mp3" + }, + { + "id": "summary", + "text": "本日は、テスト太郎様ご家族のライフプランについて解説しました。現状の課題を把握し、早めに具体的な対策を講じることで、安心して将来を迎えることができます。ぜひ、今回の分析を参考に、より良いライフプランを設計してください。", + "duration": 19.728, + "visualType": "ppt", + "slideIndex": 7, + "highlightArea": "full", + "audioPath": "public/combined_narration/narration_summary.mp3" + } + ], + "assets": { + "broll": { + "Japanese family sitting together": "Family Gathering_5856567.mp4", + "Japanese couple calculating budget": "Budgeting Couple_7958685.mp4", + "Japanese man explaining feelings": "Expressing Feelings_7957918.mp4", + "Asian man nodding in agreement": "Nodding In Agreement_4586579.mp4", + "Japanese retired couple smiling": "Smiling Retirees_6761158.mp4", + "Japanese family visiting a new car": "Car Shopping_31980658.mp4", + "Japanese consultant pointing at document": "Consultant Pointing_7844849.mp4", + "Japanese advisor asking about family": "Advisor Inquiring_7844849.mp4", + "Asian man giving his birthday": "Giving Birthday_5529618.mp4", + "Japanese businessman greeting warmly": "Warm Greeting_3304352.mp4", + "Japanese student studying hard": "Studying Hard_7958453.mp4", + "Japanese calendar with events marked": "Marked Calendar_9057559.mp4", + "Japanese financial planner verifying age": "Verifying Age_6539952.mp4", + "Japanese advisor bowing politely": "Polite Bowing_7958678.mp4", + "Japanese man introduced himself": "Self-Introduction_7958453.mp4", + "Japanese financial consultant showing graphs": "Showing Graphs_7844858.mp4", + "Japanese financial advisor consulting client": "Client Consulting_4486777.mp4", + "Japanese man talking in interview": "Interview Talking_4428754.mp4" + }, + "videoClips": [ + { + "id": "clip_1", + "outputPath": "public\\clip_1_13.0-18.0.mp4", + "filepath": "public\\clip_1_13.0-18.0.mp4", + "start": 13.0, + "end": 18.0, + "duration": 5.0, + "description": "すいませんが、お客様のお名前からお願いいたします。\nはい、私がテストテロとして、家族情報として、\n生年月日の方は?\nはい、生年月日の方は、1980年の1月の1日です。" + }, + { + "id": "clip_2", + "outputPath": "public\\clip_2_52.0-57.0.mp4", + "filepath": "public\\clip_2_52.0-57.0.mp4", + "start": 52.0, + "end": 57.0, + "duration": 5.0, + "description": "すいませんが、前代の、ざっくりでよろしいので、年収はどのくらいになりますでしょうか。\n年収が今700万くらいですね。" + }, + { + "id": "clip_3", + "outputPath": "public\\clip_3_71.0-76.0.mp4", + "filepath": "public\\clip_3_71.0-76.0.mp4", + "start": 71.0, + "end": 76.0, + "duration": 5.0, + "description": "下の名前だけでいいので、奥様のお名前をお願いいたします。\n花子です。\nはい。奥様の生年月日を教えていただけますか。\n1990年の1月の10日です。" + } + ], + "slides": [ + { + "index": 0, + "title": "ライフプラン", + "image_path": "public/slide_001.png" + }, + { + "index": 1, + "title": "2", + "image_path": "public/slide_002.png" + }, + { + "index": 2, + "title": "3", + "image_path": "public/slide_003.png" + }, + { + "index": 3, + "title": "4", + "image_path": "public/slide_004.png" + }, + { + "index": 4, + "title": "5", + "image_path": "public/slide_005.png" + }, + { + "index": 5, + "title": "6", + "image_path": "public/slide_006.png" + }, + { + "index": 6, + "title": "7", + "image_path": "public/slide_007.png" + } + ] + } +} \ No newline at end of file diff --git a/assets/1_processed/render_props_dialogue.json b/assets/1_processed/render_props_dialogue.json new file mode 100644 index 0000000..969f251 --- /dev/null +++ b/assets/1_processed/render_props_dialogue.json @@ -0,0 +1,2186 @@ +{ + "meta": { + "title": "【对话版】テスト太郎様の人生設計", + "currencyUnit": "万円", + "duration": 180, + "clientName": "テスト太郎" + }, + "charts": { + "assetDepletion": { + "timeline": [ + { + "year": 2025, + "ages": { + "rep": 47, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 288.0, + "assetBalance": 1349.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2026, + "ages": { + "rep": 48, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 294.0, + "assetBalance": 1799.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2027, + "ages": { + "rep": 49, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 300.0, + "assetBalance": 2256.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2028, + "ages": { + "rep": 50, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 306.0, + "assetBalance": 2721.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2029, + "ages": { + "rep": 51, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 312.0, + "assetBalance": 3194.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2030, + "ages": { + "rep": 52, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 318.0, + "assetBalance": 3675.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2031, + "ages": { + "rep": 53, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 324.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2032, + "ages": { + "rep": 54, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 331.0, + "assetBalance": 4661.0 + }, + "events": [ + "Event", + "Event" + ], + "isCritical": false + }, + { + "year": 2033, + "ages": { + "rep": 55, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 337.0, + "assetBalance": 5166.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2034, + "ages": { + "rep": 56, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 344.0, + "assetBalance": 5680.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2035, + "ages": { + "rep": 57, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 351.0, + "assetBalance": 6203.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2036, + "ages": { + "rep": 58, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 358.0, + "assetBalance": 6734.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2037, + "ages": { + "rep": 59, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 365.0, + "assetBalance": 7273.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2038, + "ages": { + "rep": 60, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 373.0, + "assetBalance": 7119.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2039, + "ages": { + "rep": 61, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 380.0, + "assetBalance": 6953.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2040, + "ages": { + "rep": 62, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 388.0, + "assetBalance": 6774.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2041, + "ages": { + "rep": 63, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 395.0, + "assetBalance": 6581.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2042, + "ages": { + "rep": 64, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 403.0, + "assetBalance": 6376.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2043, + "ages": { + "rep": 65, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 411.0, + "assetBalance": 6155.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2044, + "ages": { + "rep": 66, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 420.0, + "assetBalance": 5921.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2045, + "ages": { + "rep": 67, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 428.0, + "assetBalance": 5670.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2046, + "ages": { + "rep": 68, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 437.0, + "assetBalance": 5404.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2047, + "ages": { + "rep": 69, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 445.0, + "assetBalance": 5121.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2048, + "ages": { + "rep": 70, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 454.0, + "assetBalance": 4820.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2049, + "ages": { + "rep": 71, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 463.0, + "assetBalance": 4502.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2050, + "ages": { + "rep": 72, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 472.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2051, + "ages": { + "rep": 73, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 482.0, + "assetBalance": 3807.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2052, + "ages": { + "rep": 74, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 492.0, + "assetBalance": 3430.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2053, + "ages": { + "rep": 75, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 501.0, + "assetBalance": 3031.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2054, + "ages": { + "rep": 76, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 511.0, + "assetBalance": 2611.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2055, + "ages": { + "rep": 77, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 522.0, + "assetBalance": 2167.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2056, + "ages": { + "rep": 78, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 532.0, + "assetBalance": 1700.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2057, + "ages": { + "rep": 79, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 543.0, + "assetBalance": 1209.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2058, + "ages": { + "rep": 80, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 554.0, + "assetBalance": 691.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2059, + "ages": { + "rep": 81, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 565.0, + "assetBalance": 147.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2060, + "ages": { + "rep": 82, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 576.0, + "assetBalance": -424.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2061, + "ages": { + "rep": 83, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 587.0, + "assetBalance": -1075.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2062, + "ages": { + "rep": 84, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 599.0, + "assetBalance": -1836.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2063, + "ages": { + "rep": 85, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 611.0, + "assetBalance": -2723.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2064, + "ages": { + "rep": 86, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 623.0, + "assetBalance": -3754.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2065, + "ages": { + "rep": 87, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 636.0, + "assetBalance": -4954.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2066, + "ages": { + "rep": 88, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 649.0, + "assetBalance": -6345.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2067, + "ages": { + "rep": 89, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 662.0, + "assetBalance": -7959.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2068, + "ages": { + "rep": 90, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 675.0, + "assetBalance": -9827.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2069, + "ages": { + "rep": 91, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 688.0, + "assetBalance": -11990.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2070, + "ages": { + "rep": 92, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 702.0, + "assetBalance": -14490.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2071, + "ages": { + "rep": 93, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 716.0, + "assetBalance": -17380.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2072, + "ages": { + "rep": 94, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 730.0, + "assetBalance": -20717.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2073, + "ages": { + "rep": 95, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 745.0, + "assetBalance": -24570.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2074, + "ages": { + "rep": 96, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 760.0, + "assetBalance": -29015.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2075, + "ages": { + "rep": 97, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 775.0, + "assetBalance": -34143.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2076, + "ages": { + "rep": 98, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 791.0, + "assetBalance": -40055.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2077, + "ages": { + "rep": 99, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 806.0, + "assetBalance": -46870.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2078, + "ages": { + "rep": 100, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 823.0, + "assetBalance": -54723.0 + }, + "events": [], + "isCritical": true + } + ], + "meta": { + "currencyUnit": "万円", + "startYear": 2025 + } + }, + "cashFlow": { + "timeline": [ + { + "year": 2025, + "age": 47, + "income": { + "total": 703 + }, + "expenses": { + "living": 115.2, + "housing": 86.39999999999999, + "education": 43.199999999999996, + "tax": 28.8, + "event": 14.4 + }, + "totalExpense": 288.0, + "netCashFlow": 415.0, + "assetBalance": 1349.0 + }, + { + "year": 2026, + "age": 48, + "income": { + "total": 703 + }, + "expenses": { + "living": 117.60000000000001, + "housing": 88.2, + "education": 44.1, + "tax": 29.400000000000002, + "event": 14.700000000000001 + }, + "totalExpense": 294.0, + "netCashFlow": 409.0, + "assetBalance": 1799.0 + }, + { + "year": 2027, + "age": 49, + "income": { + "total": 703 + }, + "expenses": { + "living": 120.0, + "housing": 90.0, + "education": 45.0, + "tax": 30.0, + "event": 15.0 + }, + "totalExpense": 300.0, + "netCashFlow": 403.0, + "assetBalance": 2256.0 + }, + { + "year": 2028, + "age": 50, + "income": { + "total": 703 + }, + "expenses": { + "living": 122.4, + "housing": 91.8, + "education": 45.9, + "tax": 30.6, + "event": 15.3 + }, + "totalExpense": 306.0, + "netCashFlow": 397.0, + "assetBalance": 2721.0 + }, + { + "year": 2029, + "age": 51, + "income": { + "total": 703 + }, + "expenses": { + "living": 124.80000000000001, + "housing": 93.6, + "education": 46.8, + "tax": 31.200000000000003, + "event": 15.600000000000001 + }, + "totalExpense": 312.0, + "netCashFlow": 391.0, + "assetBalance": 3194.0 + }, + { + "year": 2030, + "age": 52, + "income": { + "total": 703 + }, + "expenses": { + "living": 127.2, + "housing": 95.39999999999999, + "education": 47.699999999999996, + "tax": 31.8, + "event": 15.9 + }, + "totalExpense": 318.0, + "netCashFlow": 385.0, + "assetBalance": 3675.0 + }, + { + "year": 2031, + "age": 53, + "income": { + "total": 703 + }, + "expenses": { + "living": 129.6, + "housing": 97.2, + "education": 48.6, + "tax": 32.4, + "event": 16.2 + }, + "totalExpense": 324.0, + "netCashFlow": 379.0, + "assetBalance": 4164.0 + }, + { + "year": 2032, + "age": 54, + "income": { + "total": 703 + }, + "expenses": { + "living": 132.4, + "housing": 99.3, + "education": 49.65, + "tax": 33.1, + "event": 16.55 + }, + "totalExpense": 331.0, + "netCashFlow": 372.0, + "assetBalance": 4661.0 + }, + { + "year": 2033, + "age": 55, + "income": { + "total": 703 + }, + "expenses": { + "living": 134.8, + "housing": 101.1, + "education": 50.55, + "tax": 33.7, + "event": 16.85 + }, + "totalExpense": 337.0, + "netCashFlow": 366.0, + "assetBalance": 5166.0 + }, + { + "year": 2034, + "age": 56, + "income": { + "total": 703 + }, + "expenses": { + "living": 137.6, + "housing": 103.2, + "education": 51.6, + "tax": 34.4, + "event": 17.2 + }, + "totalExpense": 344.0, + "netCashFlow": 359.0, + "assetBalance": 5680.0 + }, + { + "year": 2035, + "age": 57, + "income": { + "total": 703 + }, + "expenses": { + "living": 140.4, + "housing": 105.3, + "education": 52.65, + "tax": 35.1, + "event": 17.55 + }, + "totalExpense": 351.0, + "netCashFlow": 352.0, + "assetBalance": 6203.0 + }, + { + "year": 2036, + "age": 58, + "income": { + "total": 703 + }, + "expenses": { + "living": 143.20000000000002, + "housing": 107.39999999999999, + "education": 53.699999999999996, + "tax": 35.800000000000004, + "event": 17.900000000000002 + }, + "totalExpense": 358.0, + "netCashFlow": 345.0, + "assetBalance": 6734.0 + }, + { + "year": 2037, + "age": 59, + "income": { + "total": 703 + }, + "expenses": { + "living": 146.0, + "housing": 109.5, + "education": 54.75, + "tax": 36.5, + "event": 18.25 + }, + "totalExpense": 365.0, + "netCashFlow": 338.0, + "assetBalance": 7273.0 + }, + { + "year": 2038, + "age": 60, + "income": { + "total": 0 + }, + "expenses": { + "living": 149.20000000000002, + "housing": 111.89999999999999, + "education": 55.949999999999996, + "tax": 37.300000000000004, + "event": 18.650000000000002 + }, + "totalExpense": 373.0, + "netCashFlow": -373.0, + "assetBalance": 7119.0 + }, + { + "year": 2039, + "age": 61, + "income": { + "total": 0 + }, + "expenses": { + "living": 152.0, + "housing": 114.0, + "education": 57.0, + "tax": 38.0, + "event": 19.0 + }, + "totalExpense": 380.0, + "netCashFlow": -380.0, + "assetBalance": 6953.0 + }, + { + "year": 2040, + "age": 62, + "income": { + "total": 0 + }, + "expenses": { + "living": 155.20000000000002, + "housing": 116.39999999999999, + "education": 58.199999999999996, + "tax": 38.800000000000004, + "event": 19.400000000000002 + }, + "totalExpense": 388.0, + "netCashFlow": -388.0, + "assetBalance": 6774.0 + }, + { + "year": 2041, + "age": 63, + "income": { + "total": 0 + }, + "expenses": { + "living": 158.0, + "housing": 118.5, + "education": 59.25, + "tax": 39.5, + "event": 19.75 + }, + "totalExpense": 395.0, + "netCashFlow": -395.0, + "assetBalance": 6581.0 + }, + { + "year": 2042, + "age": 64, + "income": { + "total": 0 + }, + "expenses": { + "living": 161.20000000000002, + "housing": 120.89999999999999, + "education": 60.449999999999996, + "tax": 40.300000000000004, + "event": 20.150000000000002 + }, + "totalExpense": 403.0, + "netCashFlow": -403.0, + "assetBalance": 6376.0 + }, + { + "year": 2043, + "age": 65, + "income": { + "total": 0 + }, + "expenses": { + "living": 164.4, + "housing": 123.3, + "education": 61.65, + "tax": 41.1, + "event": 20.55 + }, + "totalExpense": 411.0, + "netCashFlow": -411.0, + "assetBalance": 6155.0 + }, + { + "year": 2044, + "age": 66, + "income": { + "total": 0 + }, + "expenses": { + "living": 168.0, + "housing": 126.0, + "education": 63.0, + "tax": 42.0, + "event": 21.0 + }, + "totalExpense": 420.0, + "netCashFlow": -420.0, + "assetBalance": 5921.0 + }, + { + "year": 2045, + "age": 67, + "income": { + "total": 0 + }, + "expenses": { + "living": 171.20000000000002, + "housing": 128.4, + "education": 64.2, + "tax": 42.800000000000004, + "event": 21.400000000000002 + }, + "totalExpense": 428.0, + "netCashFlow": -428.0, + "assetBalance": 5670.0 + }, + { + "year": 2046, + "age": 68, + "income": { + "total": 0 + }, + "expenses": { + "living": 174.8, + "housing": 131.1, + "education": 65.55, + "tax": 43.7, + "event": 21.85 + }, + "totalExpense": 437.0, + "netCashFlow": -437.0, + "assetBalance": 5404.0 + }, + { + "year": 2047, + "age": 69, + "income": { + "total": 0 + }, + "expenses": { + "living": 178.0, + "housing": 133.5, + "education": 66.75, + "tax": 44.5, + "event": 22.25 + }, + "totalExpense": 445.0, + "netCashFlow": -445.0, + "assetBalance": 5121.0 + }, + { + "year": 2048, + "age": 70, + "income": { + "total": 0 + }, + "expenses": { + "living": 181.60000000000002, + "housing": 136.2, + "education": 68.1, + "tax": 45.400000000000006, + "event": 22.700000000000003 + }, + "totalExpense": 454.0, + "netCashFlow": -454.0, + "assetBalance": 4820.0 + }, + { + "year": 2049, + "age": 71, + "income": { + "total": 0 + }, + "expenses": { + "living": 185.20000000000002, + "housing": 138.9, + "education": 69.45, + "tax": 46.300000000000004, + "event": 23.150000000000002 + }, + "totalExpense": 463.0, + "netCashFlow": -463.0, + "assetBalance": 4502.0 + }, + { + "year": 2050, + "age": 72, + "income": { + "total": 0 + }, + "expenses": { + "living": 188.8, + "housing": 141.6, + "education": 70.8, + "tax": 47.2, + "event": 23.6 + }, + "totalExpense": 472.0, + "netCashFlow": -472.0, + "assetBalance": 4164.0 + }, + { + "year": 2051, + "age": 73, + "income": { + "total": 0 + }, + "expenses": { + "living": 192.8, + "housing": 144.6, + "education": 72.3, + "tax": 48.2, + "event": 24.1 + }, + "totalExpense": 482.0, + "netCashFlow": -482.0, + "assetBalance": 3807.0 + }, + { + "year": 2052, + "age": 74, + "income": { + "total": 0 + }, + "expenses": { + "living": 196.8, + "housing": 147.6, + "education": 73.8, + "tax": 49.2, + "event": 24.6 + }, + "totalExpense": 492.0, + "netCashFlow": -492.0, + "assetBalance": 3430.0 + }, + { + "year": 2053, + "age": 75, + "income": { + "total": 0 + }, + "expenses": { + "living": 200.4, + "housing": 150.29999999999998, + "education": 75.14999999999999, + "tax": 50.1, + "event": 25.05 + }, + "totalExpense": 501.0, + "netCashFlow": -501.0, + "assetBalance": 3031.0 + }, + { + "year": 2054, + "age": 76, + "income": { + "total": 0 + }, + "expenses": { + "living": 204.4, + "housing": 153.29999999999998, + "education": 76.64999999999999, + "tax": 51.1, + "event": 25.55 + }, + "totalExpense": 511.0, + "netCashFlow": -511.0, + "assetBalance": 2611.0 + }, + { + "year": 2055, + "age": 77, + "income": { + "total": 0 + }, + "expenses": { + "living": 208.8, + "housing": 156.6, + "education": 78.3, + "tax": 52.2, + "event": 26.1 + }, + "totalExpense": 522.0, + "netCashFlow": -522.0, + "assetBalance": 2167.0 + }, + { + "year": 2056, + "age": 78, + "income": { + "total": 0 + }, + "expenses": { + "living": 212.8, + "housing": 159.6, + "education": 79.8, + "tax": 53.2, + "event": 26.6 + }, + "totalExpense": 532.0, + "netCashFlow": -532.0, + "assetBalance": 1700.0 + }, + { + "year": 2057, + "age": 79, + "income": { + "total": 0 + }, + "expenses": { + "living": 217.20000000000002, + "housing": 162.9, + "education": 81.45, + "tax": 54.300000000000004, + "event": 27.150000000000002 + }, + "totalExpense": 543.0, + "netCashFlow": -543.0, + "assetBalance": 1209.0 + }, + { + "year": 2058, + "age": 80, + "income": { + "total": 0 + }, + "expenses": { + "living": 221.60000000000002, + "housing": 166.2, + "education": 83.1, + "tax": 55.400000000000006, + "event": 27.700000000000003 + }, + "totalExpense": 554.0, + "netCashFlow": -554.0, + "assetBalance": 691.0 + }, + { + "year": 2059, + "age": 81, + "income": { + "total": 0 + }, + "expenses": { + "living": 226.0, + "housing": 169.5, + "education": 84.75, + "tax": 56.5, + "event": 28.25 + }, + "totalExpense": 565.0, + "netCashFlow": -565.0, + "assetBalance": 147.0 + }, + { + "year": 2060, + "age": 82, + "income": { + "total": 0 + }, + "expenses": { + "living": 230.4, + "housing": 172.79999999999998, + "education": 86.39999999999999, + "tax": 57.6, + "event": 28.8 + }, + "totalExpense": 576.0, + "netCashFlow": -576.0, + "assetBalance": -424.0 + }, + { + "year": 2061, + "age": 83, + "income": { + "total": 0 + }, + "expenses": { + "living": 234.8, + "housing": 176.1, + "education": 88.05, + "tax": 58.7, + "event": 29.35 + }, + "totalExpense": 587.0, + "netCashFlow": -587.0, + "assetBalance": -1075.0 + }, + { + "year": 2062, + "age": 84, + "income": { + "total": 0 + }, + "expenses": { + "living": 239.60000000000002, + "housing": 179.7, + "education": 89.85, + "tax": 59.900000000000006, + "event": 29.950000000000003 + }, + "totalExpense": 599.0, + "netCashFlow": -599.0, + "assetBalance": -1836.0 + }, + { + "year": 2063, + "age": 85, + "income": { + "total": 0 + }, + "expenses": { + "living": 244.4, + "housing": 183.29999999999998, + "education": 91.64999999999999, + "tax": 61.1, + "event": 30.55 + }, + "totalExpense": 611.0, + "netCashFlow": -611.0, + "assetBalance": -2723.0 + }, + { + "year": 2064, + "age": 86, + "income": { + "total": 0 + }, + "expenses": { + "living": 249.20000000000002, + "housing": 186.9, + "education": 93.45, + "tax": 62.300000000000004, + "event": 31.150000000000002 + }, + "totalExpense": 623.0, + "netCashFlow": -623.0, + "assetBalance": -3754.0 + }, + { + "year": 2065, + "age": 87, + "income": { + "total": 0 + }, + "expenses": { + "living": 254.4, + "housing": 190.79999999999998, + "education": 95.39999999999999, + "tax": 63.6, + "event": 31.8 + }, + "totalExpense": 636.0, + "netCashFlow": -636.0, + "assetBalance": -4954.0 + }, + { + "year": 2066, + "age": 88, + "income": { + "total": 0 + }, + "expenses": { + "living": 259.6, + "housing": 194.7, + "education": 97.35, + "tax": 64.9, + "event": 32.45 + }, + "totalExpense": 649.0, + "netCashFlow": -649.0, + "assetBalance": -6345.0 + }, + { + "year": 2067, + "age": 89, + "income": { + "total": 0 + }, + "expenses": { + "living": 264.8, + "housing": 198.6, + "education": 99.3, + "tax": 66.2, + "event": 33.1 + }, + "totalExpense": 662.0, + "netCashFlow": -662.0, + "assetBalance": -7959.0 + }, + { + "year": 2068, + "age": 90, + "income": { + "total": 0 + }, + "expenses": { + "living": 270.0, + "housing": 202.5, + "education": 101.25, + "tax": 67.5, + "event": 33.75 + }, + "totalExpense": 675.0, + "netCashFlow": -675.0, + "assetBalance": -9827.0 + }, + { + "year": 2069, + "age": 91, + "income": { + "total": 0 + }, + "expenses": { + "living": 275.2, + "housing": 206.4, + "education": 103.2, + "tax": 68.8, + "event": 34.4 + }, + "totalExpense": 688.0, + "netCashFlow": -688.0, + "assetBalance": -11990.0 + }, + { + "year": 2070, + "age": 92, + "income": { + "total": 0 + }, + "expenses": { + "living": 280.8, + "housing": 210.6, + "education": 105.3, + "tax": 70.2, + "event": 35.1 + }, + "totalExpense": 702.0, + "netCashFlow": -702.0, + "assetBalance": -14490.0 + }, + { + "year": 2071, + "age": 93, + "income": { + "total": 0 + }, + "expenses": { + "living": 286.40000000000003, + "housing": 214.79999999999998, + "education": 107.39999999999999, + "tax": 71.60000000000001, + "event": 35.800000000000004 + }, + "totalExpense": 716.0, + "netCashFlow": -716.0, + "assetBalance": -17380.0 + }, + { + "year": 2072, + "age": 94, + "income": { + "total": 0 + }, + "expenses": { + "living": 292.0, + "housing": 219.0, + "education": 109.5, + "tax": 73.0, + "event": 36.5 + }, + "totalExpense": 730.0, + "netCashFlow": -730.0, + "assetBalance": -20717.0 + }, + { + "year": 2073, + "age": 95, + "income": { + "total": 0 + }, + "expenses": { + "living": 298.0, + "housing": 223.5, + "education": 111.75, + "tax": 74.5, + "event": 37.25 + }, + "totalExpense": 745.0, + "netCashFlow": -745.0, + "assetBalance": -24570.0 + }, + { + "year": 2074, + "age": 96, + "income": { + "total": 0 + }, + "expenses": { + "living": 304.0, + "housing": 228.0, + "education": 114.0, + "tax": 76.0, + "event": 38.0 + }, + "totalExpense": 760.0, + "netCashFlow": -760.0, + "assetBalance": -29015.0 + }, + { + "year": 2075, + "age": 97, + "income": { + "total": 0 + }, + "expenses": { + "living": 310.0, + "housing": 232.5, + "education": 116.25, + "tax": 77.5, + "event": 38.75 + }, + "totalExpense": 775.0, + "netCashFlow": -775.0, + "assetBalance": -34143.0 + }, + { + "year": 2076, + "age": 98, + "income": { + "total": 0 + }, + "expenses": { + "living": 316.40000000000003, + "housing": 237.29999999999998, + "education": 118.64999999999999, + "tax": 79.10000000000001, + "event": 39.550000000000004 + }, + "totalExpense": 791.0, + "netCashFlow": -791.0, + "assetBalance": -40055.0 + }, + { + "year": 2077, + "age": 99, + "income": { + "total": 0 + }, + "expenses": { + "living": 322.40000000000003, + "housing": 241.79999999999998, + "education": 120.89999999999999, + "tax": 80.60000000000001, + "event": 40.300000000000004 + }, + "totalExpense": 806.0, + "netCashFlow": -806.0, + "assetBalance": -46870.0 + }, + { + "year": 2078, + "age": 100, + "income": { + "total": 0 + }, + "expenses": { + "living": 329.20000000000005, + "housing": 246.89999999999998, + "education": 123.44999999999999, + "tax": 82.30000000000001, + "event": 41.150000000000006 + }, + "totalExpense": 823.0, + "netCashFlow": -823.0, + "assetBalance": -54723.0 + } + ], + "meta": { + "currencyUnit": "万円" + } + } + }, + "script": [ + { + "id": 1, + "text": "お客様のライフプランを提供するために、お客様の基本情報をお願いいたします。", + "duration": 13.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_000.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 2, + "text": "すいませんが、お客様のお名前からお願いいたします。", + "duration": 5.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_001.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 3, + "text": "はい、私がテストテロとして、家族情報として、", + "duration": 11.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_002.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 4, + "text": "生年月日の方は?", + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_003.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 5, + "text": "はい、生年月日の方は、1980年の1月の1日です。", + "duration": 9.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_004.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 6, + "text": "ということは、47歳ということでよろしいでしょうか。", + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_005.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 7, + "text": "はい。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_006.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 8, + "text": "現在のお勤め先はどこになりますでしょうか?", + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_007.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 9, + "text": "IT系ですね。", + "duration": 2.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_008.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 10, + "text": "IT系ですね。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_009.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 11, + "text": "はい。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_010.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 12, + "text": "すいませんが、前代の、ざっくりでよろしいので、年収はどのくらいになりますでしょうか。", + "duration": 6.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_011.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 13, + "text": "年収が今700万くらいですね。", + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_012.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 14, + "text": "はい。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_013.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 15, + "text": "では、家族構成について、お客様、ご結婚はなされておりますか。", + "duration": 7.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_014.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 16, + "text": "そうですね。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_015.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 17, + "text": "はい。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_016.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 18, + "text": "下の名前だけでいいので、奥様のお名前をお願いいたします。", + "duration": 4.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_017.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 19, + "text": "花子です。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_018.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 20, + "text": "はい。奥様の生年月日を教えていただけますか。", + "duration": 4.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_019.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 21, + "text": "1990年の1月の10日です。", + "duration": 7.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_020.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 22, + "text": "ということは、現在37歳ということでよろしいでしょうか。", + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_021.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 23, + "text": "そうですね。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_022.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 24, + "text": "奥様は、ご勤めになられてますでしょうか。", + "duration": 4.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_023.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 25, + "text": "そうですね。普通のサービス会ですけど、はい。", + "duration": 4.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_024.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 26, + "text": "ざっくりでよろしいので、奥様の年収が600万くらいですね。", + "duration": 5.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_025.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 27, + "text": "はい。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_026.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 28, + "text": "では続きまして、お子様の方はいらっしゃいますか。", + "duration": 4.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_027.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 29, + "text": "はい、います。", + "duration": 2.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_028.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 30, + "text": "何人いらっしゃいますか。", + "duration": 2.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_029.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 31, + "text": "一人子だけです。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_030.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 32, + "text": "一人だけですね。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_031.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 33, + "text": "生年月日とかは。", + "duration": 2.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_032.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 34, + "text": "2018年の3月の3日ですけど。", + "duration": 5.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_033.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 35, + "text": "そうですか。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_034.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 36, + "text": "現在7歳ということで、たぶん小学校だと思いますけども、小学校の方は孤立ですでしょうか。", + "duration": 11.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_035.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 37, + "text": "孤立です。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_036.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 38, + "text": "あ、孤立ですね。", + "duration": 1.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "audioPath": "public/dialogue/dialogue_seg_037.mp3", + "brollKeyword": "Japanese interview" + }, + { + "id": 39, + "text": "ありがとうございます。", + "duration": 3.0, + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "audioPath": "public/dialogue/dialogue_seg_038.mp3", + "brollKeyword": "Japanese interview" + } + ], + "assets": { + "broll": { + "Japanese family sitting together": "Family Gathering_5856567.mp4", + "Japanese couple calculating budget": "Budgeting Couple_7958685.mp4", + "Japanese man explaining feelings": "Expressing Feelings_7957918.mp4", + "Asian man nodding in agreement": "Nodding In Agreement_4586579.mp4", + "Japanese retired couple smiling": "Smiling Retirees_6761158.mp4", + "Japanese family visiting a new car": "Car Shopping_31980658.mp4", + "Japanese consultant pointing at document": "Consultant Pointing_7844849.mp4", + "Japanese advisor asking about family": "Advisor Inquiring_7844849.mp4", + "Asian man giving his birthday": "Giving Birthday_5529618.mp4", + "Japanese businessman greeting warmly": "Warm Greeting_3304352.mp4", + "Japanese student studying hard": "Studying Hard_7958453.mp4", + "Japanese calendar with events marked": "Marked Calendar_9057559.mp4", + "Japanese financial planner verifying age": "Verifying Age_6539952.mp4", + "Japanese advisor bowing politely": "Polite Bowing_7958678.mp4", + "Japanese man introduced himself": "Self-Introduction_7958453.mp4", + "Japanese financial consultant showing graphs": "Showing Graphs_7844858.mp4", + "Japanese financial advisor consulting client": "Client Consulting_4486777.mp4", + "Japanese man talking in interview": "Interview Talking_4428754.mp4" + }, + "videoClips": [ + { + "id": "clip_1", + "outputPath": "public\\clip_1_13.0-18.0.mp4", + "filepath": "public\\clip_1_13.0-18.0.mp4", + "start": 13.0, + "end": 18.0, + "duration": 5.0, + "description": "すいませんが、お客様のお名前からお願いいたします。\nはい、私がテストテロとして、家族情報として、\n生年月日の方は?\nはい、生年月日の方は、1980年の1月の1日です。" + }, + { + "id": "clip_2", + "outputPath": "public\\clip_2_52.0-57.0.mp4", + "filepath": "public\\clip_2_52.0-57.0.mp4", + "start": 52.0, + "end": 57.0, + "duration": 5.0, + "description": "すいませんが、前代の、ざっくりでよろしいので、年収はどのくらいになりますでしょうか。\n年収が今700万くらいですね。" + }, + { + "id": "clip_3", + "outputPath": "public\\clip_3_71.0-76.0.mp4", + "filepath": "public\\clip_3_71.0-76.0.mp4", + "start": 71.0, + "end": 76.0, + "duration": 5.0, + "description": "下の名前だけでいいので、奥様のお名前をお願いいたします。\n花子です。\nはい。奥様の生年月日を教えていただけますか。\n1990年の1月の10日です。" + } + ], + "slides": [ + { + "index": 0, + "title": "ライフプラン", + "image_path": "public/slide_001.png" + }, + { + "index": 1, + "title": "2", + "image_path": "public/slide_002.png" + }, + { + "index": 2, + "title": "3", + "image_path": "public/slide_003.png" + }, + { + "index": 3, + "title": "4", + "image_path": "public/slide_004.png" + }, + { + "index": 4, + "title": "5", + "image_path": "public/slide_005.png" + }, + { + "index": 5, + "title": "6", + "image_path": "public/slide_006.png" + }, + { + "index": 6, + "title": "7", + "image_path": "public/slide_007.png" + } + ] + } +} \ No newline at end of file diff --git a/assets/1_processed/render_props_family_intro.json b/assets/1_processed/render_props_family_intro.json new file mode 100644 index 0000000..c33e4b3 --- /dev/null +++ b/assets/1_processed/render_props_family_intro.json @@ -0,0 +1,2243 @@ +{ + "meta": { + "title": "【家族紹介】テスト太郎様ご家族", + "currencyUnit": "万円", + "duration": 68.016, + "clientName": "テスト太郎" + }, + "charts": { + "assetDepletion": { + "timeline": [ + { + "year": 2025, + "ages": { + "rep": 47, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 288.0, + "assetBalance": 1349.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2026, + "ages": { + "rep": 48, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 294.0, + "assetBalance": 1799.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2027, + "ages": { + "rep": 49, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 300.0, + "assetBalance": 2256.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2028, + "ages": { + "rep": 50, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 306.0, + "assetBalance": 2721.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2029, + "ages": { + "rep": 51, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 312.0, + "assetBalance": 3194.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2030, + "ages": { + "rep": 52, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 318.0, + "assetBalance": 3675.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2031, + "ages": { + "rep": 53, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 324.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2032, + "ages": { + "rep": 54, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 331.0, + "assetBalance": 4661.0 + }, + "events": [ + "Event", + "Event" + ], + "isCritical": false + }, + { + "year": 2033, + "ages": { + "rep": 55, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 337.0, + "assetBalance": 5166.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2034, + "ages": { + "rep": 56, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 344.0, + "assetBalance": 5680.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2035, + "ages": { + "rep": 57, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 351.0, + "assetBalance": 6203.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2036, + "ages": { + "rep": 58, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 358.0, + "assetBalance": 6734.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2037, + "ages": { + "rep": 59, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 365.0, + "assetBalance": 7273.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2038, + "ages": { + "rep": 60, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 373.0, + "assetBalance": 7119.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2039, + "ages": { + "rep": 61, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 380.0, + "assetBalance": 6953.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2040, + "ages": { + "rep": 62, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 388.0, + "assetBalance": 6774.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2041, + "ages": { + "rep": 63, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 395.0, + "assetBalance": 6581.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2042, + "ages": { + "rep": 64, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 403.0, + "assetBalance": 6376.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2043, + "ages": { + "rep": 65, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 411.0, + "assetBalance": 6155.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2044, + "ages": { + "rep": 66, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 420.0, + "assetBalance": 5921.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2045, + "ages": { + "rep": 67, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 428.0, + "assetBalance": 5670.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2046, + "ages": { + "rep": 68, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 437.0, + "assetBalance": 5404.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2047, + "ages": { + "rep": 69, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 445.0, + "assetBalance": 5121.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2048, + "ages": { + "rep": 70, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 454.0, + "assetBalance": 4820.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2049, + "ages": { + "rep": 71, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 463.0, + "assetBalance": 4502.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2050, + "ages": { + "rep": 72, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 472.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2051, + "ages": { + "rep": 73, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 482.0, + "assetBalance": 3807.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2052, + "ages": { + "rep": 74, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 492.0, + "assetBalance": 3430.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2053, + "ages": { + "rep": 75, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 501.0, + "assetBalance": 3031.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2054, + "ages": { + "rep": 76, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 511.0, + "assetBalance": 2611.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2055, + "ages": { + "rep": 77, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 522.0, + "assetBalance": 2167.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2056, + "ages": { + "rep": 78, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 532.0, + "assetBalance": 1700.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2057, + "ages": { + "rep": 79, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 543.0, + "assetBalance": 1209.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2058, + "ages": { + "rep": 80, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 554.0, + "assetBalance": 691.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2059, + "ages": { + "rep": 81, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 565.0, + "assetBalance": 147.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2060, + "ages": { + "rep": 82, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 576.0, + "assetBalance": -424.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2061, + "ages": { + "rep": 83, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 587.0, + "assetBalance": -1075.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2062, + "ages": { + "rep": 84, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 599.0, + "assetBalance": -1836.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2063, + "ages": { + "rep": 85, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 611.0, + "assetBalance": -2723.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2064, + "ages": { + "rep": 86, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 623.0, + "assetBalance": -3754.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2065, + "ages": { + "rep": 87, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 636.0, + "assetBalance": -4954.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2066, + "ages": { + "rep": 88, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 649.0, + "assetBalance": -6345.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2067, + "ages": { + "rep": 89, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 662.0, + "assetBalance": -7959.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2068, + "ages": { + "rep": 90, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 675.0, + "assetBalance": -9827.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2069, + "ages": { + "rep": 91, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 688.0, + "assetBalance": -11990.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2070, + "ages": { + "rep": 92, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 702.0, + "assetBalance": -14490.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2071, + "ages": { + "rep": 93, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 716.0, + "assetBalance": -17380.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2072, + "ages": { + "rep": 94, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 730.0, + "assetBalance": -20717.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2073, + "ages": { + "rep": 95, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 745.0, + "assetBalance": -24570.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2074, + "ages": { + "rep": 96, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 760.0, + "assetBalance": -29015.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2075, + "ages": { + "rep": 97, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 775.0, + "assetBalance": -34143.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2076, + "ages": { + "rep": 98, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 791.0, + "assetBalance": -40055.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2077, + "ages": { + "rep": 99, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 806.0, + "assetBalance": -46870.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2078, + "ages": { + "rep": 100, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 823.0, + "assetBalance": -54723.0 + }, + "events": [], + "isCritical": true + } + ], + "meta": { + "currencyUnit": "万円", + "startYear": 2025 + } + }, + "cashFlow": { + "timeline": [ + { + "year": 2025, + "age": 47, + "income": { + "total": 703 + }, + "expenses": { + "living": 115.2, + "housing": 86.39999999999999, + "education": 43.199999999999996, + "tax": 28.8, + "event": 14.4 + }, + "totalExpense": 288.0, + "netCashFlow": 415.0, + "assetBalance": 1349.0 + }, + { + "year": 2026, + "age": 48, + "income": { + "total": 703 + }, + "expenses": { + "living": 117.60000000000001, + "housing": 88.2, + "education": 44.1, + "tax": 29.400000000000002, + "event": 14.700000000000001 + }, + "totalExpense": 294.0, + "netCashFlow": 409.0, + "assetBalance": 1799.0 + }, + { + "year": 2027, + "age": 49, + "income": { + "total": 703 + }, + "expenses": { + "living": 120.0, + "housing": 90.0, + "education": 45.0, + "tax": 30.0, + "event": 15.0 + }, + "totalExpense": 300.0, + "netCashFlow": 403.0, + "assetBalance": 2256.0 + }, + { + "year": 2028, + "age": 50, + "income": { + "total": 703 + }, + "expenses": { + "living": 122.4, + "housing": 91.8, + "education": 45.9, + "tax": 30.6, + "event": 15.3 + }, + "totalExpense": 306.0, + "netCashFlow": 397.0, + "assetBalance": 2721.0 + }, + { + "year": 2029, + "age": 51, + "income": { + "total": 703 + }, + "expenses": { + "living": 124.80000000000001, + "housing": 93.6, + "education": 46.8, + "tax": 31.200000000000003, + "event": 15.600000000000001 + }, + "totalExpense": 312.0, + "netCashFlow": 391.0, + "assetBalance": 3194.0 + }, + { + "year": 2030, + "age": 52, + "income": { + "total": 703 + }, + "expenses": { + "living": 127.2, + "housing": 95.39999999999999, + "education": 47.699999999999996, + "tax": 31.8, + "event": 15.9 + }, + "totalExpense": 318.0, + "netCashFlow": 385.0, + "assetBalance": 3675.0 + }, + { + "year": 2031, + "age": 53, + "income": { + "total": 703 + }, + "expenses": { + "living": 129.6, + "housing": 97.2, + "education": 48.6, + "tax": 32.4, + "event": 16.2 + }, + "totalExpense": 324.0, + "netCashFlow": 379.0, + "assetBalance": 4164.0 + }, + { + "year": 2032, + "age": 54, + "income": { + "total": 703 + }, + "expenses": { + "living": 132.4, + "housing": 99.3, + "education": 49.65, + "tax": 33.1, + "event": 16.55 + }, + "totalExpense": 331.0, + "netCashFlow": 372.0, + "assetBalance": 4661.0 + }, + { + "year": 2033, + "age": 55, + "income": { + "total": 703 + }, + "expenses": { + "living": 134.8, + "housing": 101.1, + "education": 50.55, + "tax": 33.7, + "event": 16.85 + }, + "totalExpense": 337.0, + "netCashFlow": 366.0, + "assetBalance": 5166.0 + }, + { + "year": 2034, + "age": 56, + "income": { + "total": 703 + }, + "expenses": { + "living": 137.6, + "housing": 103.2, + "education": 51.6, + "tax": 34.4, + "event": 17.2 + }, + "totalExpense": 344.0, + "netCashFlow": 359.0, + "assetBalance": 5680.0 + }, + { + "year": 2035, + "age": 57, + "income": { + "total": 703 + }, + "expenses": { + "living": 140.4, + "housing": 105.3, + "education": 52.65, + "tax": 35.1, + "event": 17.55 + }, + "totalExpense": 351.0, + "netCashFlow": 352.0, + "assetBalance": 6203.0 + }, + { + "year": 2036, + "age": 58, + "income": { + "total": 703 + }, + "expenses": { + "living": 143.20000000000002, + "housing": 107.39999999999999, + "education": 53.699999999999996, + "tax": 35.800000000000004, + "event": 17.900000000000002 + }, + "totalExpense": 358.0, + "netCashFlow": 345.0, + "assetBalance": 6734.0 + }, + { + "year": 2037, + "age": 59, + "income": { + "total": 703 + }, + "expenses": { + "living": 146.0, + "housing": 109.5, + "education": 54.75, + "tax": 36.5, + "event": 18.25 + }, + "totalExpense": 365.0, + "netCashFlow": 338.0, + "assetBalance": 7273.0 + }, + { + "year": 2038, + "age": 60, + "income": { + "total": 0 + }, + "expenses": { + "living": 149.20000000000002, + "housing": 111.89999999999999, + "education": 55.949999999999996, + "tax": 37.300000000000004, + "event": 18.650000000000002 + }, + "totalExpense": 373.0, + "netCashFlow": -373.0, + "assetBalance": 7119.0 + }, + { + "year": 2039, + "age": 61, + "income": { + "total": 0 + }, + "expenses": { + "living": 152.0, + "housing": 114.0, + "education": 57.0, + "tax": 38.0, + "event": 19.0 + }, + "totalExpense": 380.0, + "netCashFlow": -380.0, + "assetBalance": 6953.0 + }, + { + "year": 2040, + "age": 62, + "income": { + "total": 0 + }, + "expenses": { + "living": 155.20000000000002, + "housing": 116.39999999999999, + "education": 58.199999999999996, + "tax": 38.800000000000004, + "event": 19.400000000000002 + }, + "totalExpense": 388.0, + "netCashFlow": -388.0, + "assetBalance": 6774.0 + }, + { + "year": 2041, + "age": 63, + "income": { + "total": 0 + }, + "expenses": { + "living": 158.0, + "housing": 118.5, + "education": 59.25, + "tax": 39.5, + "event": 19.75 + }, + "totalExpense": 395.0, + "netCashFlow": -395.0, + "assetBalance": 6581.0 + }, + { + "year": 2042, + "age": 64, + "income": { + "total": 0 + }, + "expenses": { + "living": 161.20000000000002, + "housing": 120.89999999999999, + "education": 60.449999999999996, + "tax": 40.300000000000004, + "event": 20.150000000000002 + }, + "totalExpense": 403.0, + "netCashFlow": -403.0, + "assetBalance": 6376.0 + }, + { + "year": 2043, + "age": 65, + "income": { + "total": 0 + }, + "expenses": { + "living": 164.4, + "housing": 123.3, + "education": 61.65, + "tax": 41.1, + "event": 20.55 + }, + "totalExpense": 411.0, + "netCashFlow": -411.0, + "assetBalance": 6155.0 + }, + { + "year": 2044, + "age": 66, + "income": { + "total": 0 + }, + "expenses": { + "living": 168.0, + "housing": 126.0, + "education": 63.0, + "tax": 42.0, + "event": 21.0 + }, + "totalExpense": 420.0, + "netCashFlow": -420.0, + "assetBalance": 5921.0 + }, + { + "year": 2045, + "age": 67, + "income": { + "total": 0 + }, + "expenses": { + "living": 171.20000000000002, + "housing": 128.4, + "education": 64.2, + "tax": 42.800000000000004, + "event": 21.400000000000002 + }, + "totalExpense": 428.0, + "netCashFlow": -428.0, + "assetBalance": 5670.0 + }, + { + "year": 2046, + "age": 68, + "income": { + "total": 0 + }, + "expenses": { + "living": 174.8, + "housing": 131.1, + "education": 65.55, + "tax": 43.7, + "event": 21.85 + }, + "totalExpense": 437.0, + "netCashFlow": -437.0, + "assetBalance": 5404.0 + }, + { + "year": 2047, + "age": 69, + "income": { + "total": 0 + }, + "expenses": { + "living": 178.0, + "housing": 133.5, + "education": 66.75, + "tax": 44.5, + "event": 22.25 + }, + "totalExpense": 445.0, + "netCashFlow": -445.0, + "assetBalance": 5121.0 + }, + { + "year": 2048, + "age": 70, + "income": { + "total": 0 + }, + "expenses": { + "living": 181.60000000000002, + "housing": 136.2, + "education": 68.1, + "tax": 45.400000000000006, + "event": 22.700000000000003 + }, + "totalExpense": 454.0, + "netCashFlow": -454.0, + "assetBalance": 4820.0 + }, + { + "year": 2049, + "age": 71, + "income": { + "total": 0 + }, + "expenses": { + "living": 185.20000000000002, + "housing": 138.9, + "education": 69.45, + "tax": 46.300000000000004, + "event": 23.150000000000002 + }, + "totalExpense": 463.0, + "netCashFlow": -463.0, + "assetBalance": 4502.0 + }, + { + "year": 2050, + "age": 72, + "income": { + "total": 0 + }, + "expenses": { + "living": 188.8, + "housing": 141.6, + "education": 70.8, + "tax": 47.2, + "event": 23.6 + }, + "totalExpense": 472.0, + "netCashFlow": -472.0, + "assetBalance": 4164.0 + }, + { + "year": 2051, + "age": 73, + "income": { + "total": 0 + }, + "expenses": { + "living": 192.8, + "housing": 144.6, + "education": 72.3, + "tax": 48.2, + "event": 24.1 + }, + "totalExpense": 482.0, + "netCashFlow": -482.0, + "assetBalance": 3807.0 + }, + { + "year": 2052, + "age": 74, + "income": { + "total": 0 + }, + "expenses": { + "living": 196.8, + "housing": 147.6, + "education": 73.8, + "tax": 49.2, + "event": 24.6 + }, + "totalExpense": 492.0, + "netCashFlow": -492.0, + "assetBalance": 3430.0 + }, + { + "year": 2053, + "age": 75, + "income": { + "total": 0 + }, + "expenses": { + "living": 200.4, + "housing": 150.29999999999998, + "education": 75.14999999999999, + "tax": 50.1, + "event": 25.05 + }, + "totalExpense": 501.0, + "netCashFlow": -501.0, + "assetBalance": 3031.0 + }, + { + "year": 2054, + "age": 76, + "income": { + "total": 0 + }, + "expenses": { + "living": 204.4, + "housing": 153.29999999999998, + "education": 76.64999999999999, + "tax": 51.1, + "event": 25.55 + }, + "totalExpense": 511.0, + "netCashFlow": -511.0, + "assetBalance": 2611.0 + }, + { + "year": 2055, + "age": 77, + "income": { + "total": 0 + }, + "expenses": { + "living": 208.8, + "housing": 156.6, + "education": 78.3, + "tax": 52.2, + "event": 26.1 + }, + "totalExpense": 522.0, + "netCashFlow": -522.0, + "assetBalance": 2167.0 + }, + { + "year": 2056, + "age": 78, + "income": { + "total": 0 + }, + "expenses": { + "living": 212.8, + "housing": 159.6, + "education": 79.8, + "tax": 53.2, + "event": 26.6 + }, + "totalExpense": 532.0, + "netCashFlow": -532.0, + "assetBalance": 1700.0 + }, + { + "year": 2057, + "age": 79, + "income": { + "total": 0 + }, + "expenses": { + "living": 217.20000000000002, + "housing": 162.9, + "education": 81.45, + "tax": 54.300000000000004, + "event": 27.150000000000002 + }, + "totalExpense": 543.0, + "netCashFlow": -543.0, + "assetBalance": 1209.0 + }, + { + "year": 2058, + "age": 80, + "income": { + "total": 0 + }, + "expenses": { + "living": 221.60000000000002, + "housing": 166.2, + "education": 83.1, + "tax": 55.400000000000006, + "event": 27.700000000000003 + }, + "totalExpense": 554.0, + "netCashFlow": -554.0, + "assetBalance": 691.0 + }, + { + "year": 2059, + "age": 81, + "income": { + "total": 0 + }, + "expenses": { + "living": 226.0, + "housing": 169.5, + "education": 84.75, + "tax": 56.5, + "event": 28.25 + }, + "totalExpense": 565.0, + "netCashFlow": -565.0, + "assetBalance": 147.0 + }, + { + "year": 2060, + "age": 82, + "income": { + "total": 0 + }, + "expenses": { + "living": 230.4, + "housing": 172.79999999999998, + "education": 86.39999999999999, + "tax": 57.6, + "event": 28.8 + }, + "totalExpense": 576.0, + "netCashFlow": -576.0, + "assetBalance": -424.0 + }, + { + "year": 2061, + "age": 83, + "income": { + "total": 0 + }, + "expenses": { + "living": 234.8, + "housing": 176.1, + "education": 88.05, + "tax": 58.7, + "event": 29.35 + }, + "totalExpense": 587.0, + "netCashFlow": -587.0, + "assetBalance": -1075.0 + }, + { + "year": 2062, + "age": 84, + "income": { + "total": 0 + }, + "expenses": { + "living": 239.60000000000002, + "housing": 179.7, + "education": 89.85, + "tax": 59.900000000000006, + "event": 29.950000000000003 + }, + "totalExpense": 599.0, + "netCashFlow": -599.0, + "assetBalance": -1836.0 + }, + { + "year": 2063, + "age": 85, + "income": { + "total": 0 + }, + "expenses": { + "living": 244.4, + "housing": 183.29999999999998, + "education": 91.64999999999999, + "tax": 61.1, + "event": 30.55 + }, + "totalExpense": 611.0, + "netCashFlow": -611.0, + "assetBalance": -2723.0 + }, + { + "year": 2064, + "age": 86, + "income": { + "total": 0 + }, + "expenses": { + "living": 249.20000000000002, + "housing": 186.9, + "education": 93.45, + "tax": 62.300000000000004, + "event": 31.150000000000002 + }, + "totalExpense": 623.0, + "netCashFlow": -623.0, + "assetBalance": -3754.0 + }, + { + "year": 2065, + "age": 87, + "income": { + "total": 0 + }, + "expenses": { + "living": 254.4, + "housing": 190.79999999999998, + "education": 95.39999999999999, + "tax": 63.6, + "event": 31.8 + }, + "totalExpense": 636.0, + "netCashFlow": -636.0, + "assetBalance": -4954.0 + }, + { + "year": 2066, + "age": 88, + "income": { + "total": 0 + }, + "expenses": { + "living": 259.6, + "housing": 194.7, + "education": 97.35, + "tax": 64.9, + "event": 32.45 + }, + "totalExpense": 649.0, + "netCashFlow": -649.0, + "assetBalance": -6345.0 + }, + { + "year": 2067, + "age": 89, + "income": { + "total": 0 + }, + "expenses": { + "living": 264.8, + "housing": 198.6, + "education": 99.3, + "tax": 66.2, + "event": 33.1 + }, + "totalExpense": 662.0, + "netCashFlow": -662.0, + "assetBalance": -7959.0 + }, + { + "year": 2068, + "age": 90, + "income": { + "total": 0 + }, + "expenses": { + "living": 270.0, + "housing": 202.5, + "education": 101.25, + "tax": 67.5, + "event": 33.75 + }, + "totalExpense": 675.0, + "netCashFlow": -675.0, + "assetBalance": -9827.0 + }, + { + "year": 2069, + "age": 91, + "income": { + "total": 0 + }, + "expenses": { + "living": 275.2, + "housing": 206.4, + "education": 103.2, + "tax": 68.8, + "event": 34.4 + }, + "totalExpense": 688.0, + "netCashFlow": -688.0, + "assetBalance": -11990.0 + }, + { + "year": 2070, + "age": 92, + "income": { + "total": 0 + }, + "expenses": { + "living": 280.8, + "housing": 210.6, + "education": 105.3, + "tax": 70.2, + "event": 35.1 + }, + "totalExpense": 702.0, + "netCashFlow": -702.0, + "assetBalance": -14490.0 + }, + { + "year": 2071, + "age": 93, + "income": { + "total": 0 + }, + "expenses": { + "living": 286.40000000000003, + "housing": 214.79999999999998, + "education": 107.39999999999999, + "tax": 71.60000000000001, + "event": 35.800000000000004 + }, + "totalExpense": 716.0, + "netCashFlow": -716.0, + "assetBalance": -17380.0 + }, + { + "year": 2072, + "age": 94, + "income": { + "total": 0 + }, + "expenses": { + "living": 292.0, + "housing": 219.0, + "education": 109.5, + "tax": 73.0, + "event": 36.5 + }, + "totalExpense": 730.0, + "netCashFlow": -730.0, + "assetBalance": -20717.0 + }, + { + "year": 2073, + "age": 95, + "income": { + "total": 0 + }, + "expenses": { + "living": 298.0, + "housing": 223.5, + "education": 111.75, + "tax": 74.5, + "event": 37.25 + }, + "totalExpense": 745.0, + "netCashFlow": -745.0, + "assetBalance": -24570.0 + }, + { + "year": 2074, + "age": 96, + "income": { + "total": 0 + }, + "expenses": { + "living": 304.0, + "housing": 228.0, + "education": 114.0, + "tax": 76.0, + "event": 38.0 + }, + "totalExpense": 760.0, + "netCashFlow": -760.0, + "assetBalance": -29015.0 + }, + { + "year": 2075, + "age": 97, + "income": { + "total": 0 + }, + "expenses": { + "living": 310.0, + "housing": 232.5, + "education": 116.25, + "tax": 77.5, + "event": 38.75 + }, + "totalExpense": 775.0, + "netCashFlow": -775.0, + "assetBalance": -34143.0 + }, + { + "year": 2076, + "age": 98, + "income": { + "total": 0 + }, + "expenses": { + "living": 316.40000000000003, + "housing": 237.29999999999998, + "education": 118.64999999999999, + "tax": 79.10000000000001, + "event": 39.550000000000004 + }, + "totalExpense": 791.0, + "netCashFlow": -791.0, + "assetBalance": -40055.0 + }, + { + "year": 2077, + "age": 99, + "income": { + "total": 0 + }, + "expenses": { + "living": 322.40000000000003, + "housing": 241.79999999999998, + "education": 120.89999999999999, + "tax": 80.60000000000001, + "event": 40.300000000000004 + }, + "totalExpense": 806.0, + "netCashFlow": -806.0, + "assetBalance": -46870.0 + }, + { + "year": 2078, + "age": 100, + "income": { + "total": 0 + }, + "expenses": { + "living": 329.20000000000005, + "housing": 246.89999999999998, + "education": 123.44999999999999, + "tax": 82.30000000000001, + "event": 41.150000000000006 + }, + "totalExpense": 823.0, + "netCashFlow": -823.0, + "assetBalance": -54723.0 + } + ], + "meta": { + "currencyUnit": "万円" + } + } + }, + "script": [ + { + "id": "intro01", + "text": "皆様、こんにちは!今日のライフプラン動画では、素敵なご家族をご紹介します。まずは、タイトルをご覧ください。", + "duration": 8.976, + "visualType": "ppt", + "visualAssetIndex": 0, + "pdfPageIndex": null, + "highlightArea": "full", + "audioPath": "public/family_intro_audio/narration_intro01.mp3" + }, + { + "id": "family01", + "text": "今回ご紹介するのは、テスト太郎さん、花子さん、そして7歳になる息子さんの3人家族です。太郎さんは情報通信業にお勤めで、年収は703万円。花子さんは卸売・小売業で、年収は368万円です。素敵なご家族ですね。", + "duration": 19.248, + "visualType": "ppt", + "visualAssetIndex": 1, + "pdfPageIndex": null, + "highlightArea": "full", + "audioPath": "public/family_intro_audio/narration_family01.mp3" + }, + { + "id": "details01", + "text": "それでは、ご家族の詳細を見ていきましょう。まず、お父様のテスト太郎さんは、1980年1月1日生まれの47歳。情報通信業でご活躍されています。続いて、花子さんは1990年2月2日生まれの37歳。卸売・小売業で頑張っていらっしゃいます。そして、可愛い息子さんは2020年3月3日生まれの7歳。すくすくと成長されています。", + "duration": 30.264, + "visualType": "pdf_page", + "visualAssetIndex": null, + "pdfPageIndex": 2, + "highlightArea": "full", + "audioPath": "public/family_intro_audio/narration_details01.mp3" + }, + { + "id": "summary01", + "text": "テストさんご一家の世帯年収は1071万円。将来の夢に向かって、素敵なライフプランを描いていきましょう。", + "duration": 9.528, + "visualType": "ppt", + "visualAssetIndex": 2, + "pdfPageIndex": null, + "highlightArea": "full", + "audioPath": "public/family_intro_audio/narration_summary01.mp3" + } + ], + "assets": { + "pdfPages": [ + { + "index": 0, + "image_path": "public/pdf_pages/pdf_page_001.png", + "description": "PDF Page 1" + }, + { + "index": 1, + "image_path": "public/pdf_pages/pdf_page_002.png", + "description": "PDF Page 2" + }, + { + "index": 2, + "image_path": "public/pdf_pages/pdf_page_003.png", + "description": "PDF Page 3" + }, + { + "index": 3, + "image_path": "public/pdf_pages/pdf_page_004.png", + "description": "PDF Page 4" + }, + { + "index": 4, + "image_path": "public/pdf_pages/pdf_page_005.png", + "description": "PDF Page 5" + }, + { + "index": 5, + "image_path": "public/pdf_pages/pdf_page_006.png", + "description": "PDF Page 6" + }, + { + "index": 6, + "image_path": "public/pdf_pages/pdf_page_007.png", + "description": "PDF Page 7" + }, + { + "index": 7, + "image_path": "public/pdf_pages/pdf_page_008.png", + "description": "PDF Page 8" + }, + { + "index": 8, + "image_path": "public/pdf_pages/pdf_page_009.png", + "description": "PDF Page 9" + }, + { + "index": 9, + "image_path": "public/pdf_pages/pdf_page_010.png", + "description": "PDF Page 10" + }, + { + "index": 10, + "image_path": "public/pdf_pages/pdf_page_011.png", + "description": "PDF Page 11" + }, + { + "index": 11, + "image_path": "public/pdf_pages/pdf_page_012.png", + "description": "PDF Page 12" + }, + { + "index": 12, + "image_path": "public/pdf_pages/pdf_page_013.png", + "description": "PDF Page 13" + }, + { + "index": 13, + "image_path": "public/pdf_pages/pdf_page_014.png", + "description": "PDF Page 14" + }, + { + "index": 14, + "image_path": "public/pdf_pages/pdf_page_015.png", + "description": "PDF Page 15" + }, + { + "index": 15, + "image_path": "public/pdf_pages/pdf_page_016.png", + "description": "PDF Page 16" + }, + { + "index": 16, + "image_path": "public/pdf_pages/pdf_page_017.png", + "description": "PDF Page 17" + }, + { + "index": 17, + "image_path": "public/pdf_pages/pdf_page_018.png", + "description": "PDF Page 18" + }, + { + "index": 18, + "image_path": "public/pdf_pages/pdf_page_019.png", + "description": "PDF Page 19" + }, + { + "index": 19, + "image_path": "public/pdf_pages/pdf_page_020.png", + "description": "PDF Page 20" + }, + { + "index": 20, + "image_path": "public/pdf_pages/pdf_page_021.png", + "description": "PDF Page 21" + }, + { + "index": 21, + "image_path": "public/pdf_pages/pdf_page_022.png", + "description": "PDF Page 22" + }, + { + "index": 22, + "image_path": "public/pdf_pages/pdf_page_023.png", + "description": "PDF Page 23" + }, + { + "index": 23, + "image_path": "public/pdf_pages/pdf_page_024.png", + "description": "PDF Page 24" + }, + { + "index": 24, + "image_path": "public/pdf_pages/pdf_page_025.png", + "description": "PDF Page 25" + }, + { + "index": 25, + "image_path": "public/pdf_pages/pdf_page_026.png", + "description": "PDF Page 26" + }, + { + "index": 26, + "image_path": "public/pdf_pages/pdf_page_027.png", + "description": "PDF Page 27" + }, + { + "index": 27, + "image_path": "public/pdf_pages/pdf_page_028.png", + "description": "PDF Page 28" + }, + { + "index": 28, + "image_path": "public/pdf_pages/pdf_page_029.png", + "description": "PDF Page 29" + }, + { + "index": 29, + "image_path": "public/pdf_pages/pdf_page_030.png", + "description": "PDF Page 30" + }, + { + "index": 30, + "image_path": "public/pdf_pages/pdf_page_031.png", + "description": "PDF Page 31" + }, + { + "index": 31, + "image_path": "public/pdf_pages/pdf_page_032.png", + "description": "PDF Page 32" + }, + { + "index": 32, + "image_path": "public/pdf_pages/pdf_page_033.png", + "description": "PDF Page 33" + }, + { + "index": 33, + "image_path": "public/pdf_pages/pdf_page_034.png", + "description": "PDF Page 34" + }, + { + "index": 34, + "image_path": "public/pdf_pages/pdf_page_035.png", + "description": "PDF Page 35" + }, + { + "index": 35, + "image_path": "public/pdf_pages/pdf_page_036.png", + "description": "PDF Page 36" + }, + { + "index": 36, + "image_path": "public/pdf_pages/pdf_page_037.png", + "description": "PDF Page 37" + }, + { + "index": 37, + "image_path": "public/pdf_pages/pdf_page_038.png", + "description": "PDF Page 38" + }, + { + "index": 38, + "image_path": "public/pdf_pages/pdf_page_039.png", + "description": "PDF Page 39" + }, + { + "index": 39, + "image_path": "public/pdf_pages/pdf_page_040.png", + "description": "PDF Page 40" + }, + { + "index": 40, + "image_path": "public/pdf_pages/pdf_page_041.png", + "description": "PDF Page 41" + }, + { + "index": 41, + "image_path": "public/pdf_pages/pdf_page_042.png", + "description": "PDF Page 42" + }, + { + "index": 42, + "image_path": "public/pdf_pages/pdf_page_043.png", + "description": "PDF Page 43" + }, + { + "index": 43, + "image_path": "public/pdf_pages/pdf_page_044.png", + "description": "PDF Page 44" + }, + { + "index": 44, + "image_path": "public/pdf_pages/pdf_page_045.png", + "description": "PDF Page 45" + }, + { + "index": 45, + "image_path": "public/pdf_pages/pdf_page_046.png", + "description": "PDF Page 46" + }, + { + "index": 46, + "image_path": "public/pdf_pages/pdf_page_047.png", + "description": "PDF Page 47" + }, + { + "index": 47, + "image_path": "public/pdf_pages/pdf_page_048.png", + "description": "PDF Page 48" + }, + { + "index": 48, + "image_path": "public/pdf_pages/pdf_page_049.png", + "description": "PDF Page 49" + }, + { + "index": 49, + "image_path": "public/pdf_pages/pdf_page_050.png", + "description": "PDF Page 50" + }, + { + "index": 50, + "image_path": "public/pdf_pages/pdf_page_051.png", + "description": "PDF Page 51" + }, + { + "index": 51, + "image_path": "public/pdf_pages/pdf_page_052.png", + "description": "PDF Page 52" + }, + { + "index": 52, + "image_path": "public/pdf_pages/pdf_page_053.png", + "description": "PDF Page 53" + }, + { + "index": 53, + "image_path": "public/pdf_pages/pdf_page_054.png", + "description": "PDF Page 54" + }, + { + "index": 54, + "image_path": "public/pdf_pages/pdf_page_055.png", + "description": "PDF Page 55" + }, + { + "index": 55, + "image_path": "public/pdf_pages/pdf_page_056.png", + "description": "PDF Page 56" + }, + { + "index": 56, + "image_path": "public/pdf_pages/pdf_page_057.png", + "description": "PDF Page 57" + }, + { + "index": 57, + "image_path": "public/pdf_pages/pdf_page_058.png", + "description": "PDF Page 58" + }, + { + "index": 58, + "image_path": "public/pdf_pages/pdf_page_059.png", + "description": "PDF Page 59" + }, + { + "index": 59, + "image_path": "public/pdf_pages/pdf_page_060.png", + "description": "PDF Page 60" + }, + { + "index": 60, + "image_path": "public/pdf_pages/pdf_page_061.png", + "description": "PDF Page 61" + }, + { + "index": 61, + "image_path": "public/pdf_pages/pdf_page_062.png", + "description": "PDF Page 62" + }, + { + "index": 62, + "image_path": "public/pdf_pages/pdf_page_063.png", + "description": "PDF Page 63" + }, + { + "index": 63, + "image_path": "public/pdf_pages/pdf_page_064.png", + "description": "PDF Page 64" + }, + { + "index": 64, + "image_path": "public/pdf_pages/pdf_page_065.png", + "description": "PDF Page 65" + }, + { + "index": 65, + "image_path": "public/pdf_pages/pdf_page_066.png", + "description": "PDF Page 66" + }, + { + "index": 66, + "image_path": "public/pdf_pages/pdf_page_067.png", + "description": "PDF Page 67" + }, + { + "index": 67, + "image_path": "public/pdf_pages/pdf_page_068.png", + "description": "PDF Page 68" + }, + { + "index": 68, + "image_path": "public/pdf_pages/pdf_page_069.png", + "description": "PDF Page 69" + }, + { + "index": 69, + "image_path": "public/pdf_pages/pdf_page_070.png", + "description": "PDF Page 70" + }, + { + "index": 70, + "image_path": "public/pdf_pages/pdf_page_071.png", + "description": "PDF Page 71" + }, + { + "index": 71, + "image_path": "public/pdf_pages/pdf_page_072.png", + "description": "PDF Page 72" + }, + { + "index": 72, + "image_path": "public/pdf_pages/pdf_page_073.png", + "description": "PDF Page 73" + }, + { + "index": 73, + "image_path": "public/pdf_pages/pdf_page_074.png", + "description": "PDF Page 74" + }, + { + "index": 74, + "image_path": "public/pdf_pages/pdf_page_075.png", + "description": "PDF Page 75" + }, + { + "index": 75, + "image_path": "public/pdf_pages/pdf_page_076.png", + "description": "PDF Page 76" + }, + { + "index": 76, + "image_path": "public/pdf_pages/pdf_page_077.png", + "description": "PDF Page 77" + }, + { + "index": 77, + "image_path": "public/pdf_pages/pdf_page_078.png", + "description": "PDF Page 78" + }, + { + "index": 78, + "image_path": "public/pdf_pages/pdf_page_079.png", + "description": "PDF Page 79" + }, + { + "index": 79, + "image_path": "public/pdf_pages/pdf_page_080.png", + "description": "PDF Page 80" + }, + { + "index": 80, + "image_path": "public/pdf_pages/pdf_page_081.png", + "description": "PDF Page 81" + } + ], + "slides": [ + { + "index": 0, + "title": "ライフプラン", + "image_path": "public/slide_001.png" + }, + { + "index": 1, + "title": "2", + "image_path": "public/slide_002.png" + }, + { + "index": 2, + "title": "3", + "image_path": "public/slide_003.png" + }, + { + "index": 3, + "title": "4", + "image_path": "public/slide_004.png" + }, + { + "index": 4, + "title": "5", + "image_path": "public/slide_005.png" + }, + { + "index": 5, + "title": "6", + "image_path": "public/slide_006.png" + }, + { + "index": 6, + "title": "7", + "image_path": "public/slide_007.png" + } + ], + "videoClips": [ + { + "id": "clip_1", + "outputPath": "public\\clip_1_13.0-18.0.mp4", + "filepath": "public\\clip_1_13.0-18.0.mp4", + "start": 13.0, + "end": 18.0, + "duration": 5.0, + "description": "すいませんが、お客様のお名前からお願いいたします。\nはい、私がテストテロとして、家族情報として、\n生年月日の方は?\nはい、生年月日の方は、1980年の1月の1日です。" + }, + { + "id": "clip_2", + "outputPath": "public\\clip_2_52.0-57.0.mp4", + "filepath": "public\\clip_2_52.0-57.0.mp4", + "start": 52.0, + "end": 57.0, + "duration": 5.0, + "description": "すいませんが、前代の、ざっくりでよろしいので、年収はどのくらいになりますでしょうか。\n年収が今700万くらいですね。" + }, + { + "id": "clip_3", + "outputPath": "public\\clip_3_71.0-76.0.mp4", + "filepath": "public\\clip_3_71.0-76.0.mp4", + "start": 71.0, + "end": 76.0, + "duration": 5.0, + "description": "下の名前だけでいいので、奥様のお名前をお願いいたします。\n花子です。\nはい。奥様の生年月日を教えていただけますか。\n1990年の1月の10日です。" + } + ], + "broll": { + "Japanese family sitting together": "Family Gathering_5856567.mp4", + "Japanese couple calculating budget": "Budgeting Couple_7958685.mp4", + "Japanese man explaining feelings": "Expressing Feelings_7957918.mp4", + "Asian man nodding in agreement": "Nodding In Agreement_4586579.mp4", + "Japanese retired couple smiling": "Smiling Retirees_6761158.mp4", + "Japanese family visiting a new car": "Car Shopping_31980658.mp4", + "Japanese consultant pointing at document": "Consultant Pointing_7844849.mp4", + "Japanese advisor asking about family": "Advisor Inquiring_7844849.mp4", + "Asian man giving his birthday": "Giving Birthday_5529618.mp4", + "Japanese businessman greeting warmly": "Warm Greeting_3304352.mp4", + "Japanese student studying hard": "Studying Hard_7958453.mp4", + "Japanese calendar with events marked": "Marked Calendar_9057559.mp4", + "Japanese financial planner verifying age": "Verifying Age_6539952.mp4", + "Japanese advisor bowing politely": "Polite Bowing_7958678.mp4", + "Japanese man introduced himself": "Self-Introduction_7958453.mp4", + "Japanese financial consultant showing graphs": "Showing Graphs_7844858.mp4", + "Japanese financial advisor consulting client": "Client Consulting_4486777.mp4", + "Japanese man talking in interview": "Interview Talking_4428754.mp4" + } + } +} \ No newline at end of file diff --git a/assets/1_processed/render_props_pdf_based.json b/assets/1_processed/render_props_pdf_based.json new file mode 100644 index 0000000..68e5134 --- /dev/null +++ b/assets/1_processed/render_props_pdf_based.json @@ -0,0 +1,2212 @@ +{ + "meta": { + "title": "【PDF解説】テスト太郎様のライフプラン", + "currencyUnit": "万円", + "duration": 74.424, + "clientName": "テスト太郎" + }, + "charts": { + "assetDepletion": { + "timeline": [ + { + "year": 2025, + "ages": { + "rep": 47, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 288.0, + "assetBalance": 1349.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2026, + "ages": { + "rep": 48, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 294.0, + "assetBalance": 1799.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2027, + "ages": { + "rep": 49, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 300.0, + "assetBalance": 2256.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2028, + "ages": { + "rep": 50, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 306.0, + "assetBalance": 2721.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2029, + "ages": { + "rep": 51, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 312.0, + "assetBalance": 3194.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2030, + "ages": { + "rep": 52, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 318.0, + "assetBalance": 3675.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2031, + "ages": { + "rep": 53, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 324.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2032, + "ages": { + "rep": 54, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 331.0, + "assetBalance": 4661.0 + }, + "events": [ + "Event", + "Event" + ], + "isCritical": false + }, + { + "year": 2033, + "ages": { + "rep": 55, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 337.0, + "assetBalance": 5166.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2034, + "ages": { + "rep": 56, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 344.0, + "assetBalance": 5680.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2035, + "ages": { + "rep": 57, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 351.0, + "assetBalance": 6203.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2036, + "ages": { + "rep": 58, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 358.0, + "assetBalance": 6734.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2037, + "ages": { + "rep": 59, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 365.0, + "assetBalance": 7273.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2038, + "ages": { + "rep": 60, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 373.0, + "assetBalance": 7119.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2039, + "ages": { + "rep": 61, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 380.0, + "assetBalance": 6953.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2040, + "ages": { + "rep": 62, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 388.0, + "assetBalance": 6774.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2041, + "ages": { + "rep": 63, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 395.0, + "assetBalance": 6581.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2042, + "ages": { + "rep": 64, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 403.0, + "assetBalance": 6376.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2043, + "ages": { + "rep": 65, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 411.0, + "assetBalance": 6155.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2044, + "ages": { + "rep": 66, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 420.0, + "assetBalance": 5921.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2045, + "ages": { + "rep": 67, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 428.0, + "assetBalance": 5670.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2046, + "ages": { + "rep": 68, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 437.0, + "assetBalance": 5404.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2047, + "ages": { + "rep": 69, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 445.0, + "assetBalance": 5121.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2048, + "ages": { + "rep": 70, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 454.0, + "assetBalance": 4820.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2049, + "ages": { + "rep": 71, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 463.0, + "assetBalance": 4502.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2050, + "ages": { + "rep": 72, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 472.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2051, + "ages": { + "rep": 73, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 482.0, + "assetBalance": 3807.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2052, + "ages": { + "rep": 74, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 492.0, + "assetBalance": 3430.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2053, + "ages": { + "rep": 75, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 501.0, + "assetBalance": 3031.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2054, + "ages": { + "rep": 76, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 511.0, + "assetBalance": 2611.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2055, + "ages": { + "rep": 77, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 522.0, + "assetBalance": 2167.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2056, + "ages": { + "rep": 78, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 532.0, + "assetBalance": 1700.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2057, + "ages": { + "rep": 79, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 543.0, + "assetBalance": 1209.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2058, + "ages": { + "rep": 80, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 554.0, + "assetBalance": 691.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2059, + "ages": { + "rep": 81, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 565.0, + "assetBalance": 147.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2060, + "ages": { + "rep": 82, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 576.0, + "assetBalance": -424.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2061, + "ages": { + "rep": 83, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 587.0, + "assetBalance": -1075.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2062, + "ages": { + "rep": 84, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 599.0, + "assetBalance": -1836.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2063, + "ages": { + "rep": 85, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 611.0, + "assetBalance": -2723.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2064, + "ages": { + "rep": 86, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 623.0, + "assetBalance": -3754.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2065, + "ages": { + "rep": 87, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 636.0, + "assetBalance": -4954.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2066, + "ages": { + "rep": 88, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 649.0, + "assetBalance": -6345.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2067, + "ages": { + "rep": 89, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 662.0, + "assetBalance": -7959.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2068, + "ages": { + "rep": 90, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 675.0, + "assetBalance": -9827.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2069, + "ages": { + "rep": 91, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 688.0, + "assetBalance": -11990.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2070, + "ages": { + "rep": 92, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 702.0, + "assetBalance": -14490.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2071, + "ages": { + "rep": 93, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 716.0, + "assetBalance": -17380.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2072, + "ages": { + "rep": 94, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 730.0, + "assetBalance": -20717.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2073, + "ages": { + "rep": 95, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 745.0, + "assetBalance": -24570.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2074, + "ages": { + "rep": 96, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 760.0, + "assetBalance": -29015.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2075, + "ages": { + "rep": 97, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 775.0, + "assetBalance": -34143.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2076, + "ages": { + "rep": 98, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 791.0, + "assetBalance": -40055.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2077, + "ages": { + "rep": 99, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 806.0, + "assetBalance": -46870.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2078, + "ages": { + "rep": 100, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 823.0, + "assetBalance": -54723.0 + }, + "events": [], + "isCritical": true + } + ], + "meta": { + "currencyUnit": "万円", + "startYear": 2025 + } + }, + "cashFlow": { + "timeline": [ + { + "year": 2025, + "age": 47, + "income": { + "total": 703 + }, + "expenses": { + "living": 115.2, + "housing": 86.39999999999999, + "education": 43.199999999999996, + "tax": 28.8, + "event": 14.4 + }, + "totalExpense": 288.0, + "netCashFlow": 415.0, + "assetBalance": 1349.0 + }, + { + "year": 2026, + "age": 48, + "income": { + "total": 703 + }, + "expenses": { + "living": 117.60000000000001, + "housing": 88.2, + "education": 44.1, + "tax": 29.400000000000002, + "event": 14.700000000000001 + }, + "totalExpense": 294.0, + "netCashFlow": 409.0, + "assetBalance": 1799.0 + }, + { + "year": 2027, + "age": 49, + "income": { + "total": 703 + }, + "expenses": { + "living": 120.0, + "housing": 90.0, + "education": 45.0, + "tax": 30.0, + "event": 15.0 + }, + "totalExpense": 300.0, + "netCashFlow": 403.0, + "assetBalance": 2256.0 + }, + { + "year": 2028, + "age": 50, + "income": { + "total": 703 + }, + "expenses": { + "living": 122.4, + "housing": 91.8, + "education": 45.9, + "tax": 30.6, + "event": 15.3 + }, + "totalExpense": 306.0, + "netCashFlow": 397.0, + "assetBalance": 2721.0 + }, + { + "year": 2029, + "age": 51, + "income": { + "total": 703 + }, + "expenses": { + "living": 124.80000000000001, + "housing": 93.6, + "education": 46.8, + "tax": 31.200000000000003, + "event": 15.600000000000001 + }, + "totalExpense": 312.0, + "netCashFlow": 391.0, + "assetBalance": 3194.0 + }, + { + "year": 2030, + "age": 52, + "income": { + "total": 703 + }, + "expenses": { + "living": 127.2, + "housing": 95.39999999999999, + "education": 47.699999999999996, + "tax": 31.8, + "event": 15.9 + }, + "totalExpense": 318.0, + "netCashFlow": 385.0, + "assetBalance": 3675.0 + }, + { + "year": 2031, + "age": 53, + "income": { + "total": 703 + }, + "expenses": { + "living": 129.6, + "housing": 97.2, + "education": 48.6, + "tax": 32.4, + "event": 16.2 + }, + "totalExpense": 324.0, + "netCashFlow": 379.0, + "assetBalance": 4164.0 + }, + { + "year": 2032, + "age": 54, + "income": { + "total": 703 + }, + "expenses": { + "living": 132.4, + "housing": 99.3, + "education": 49.65, + "tax": 33.1, + "event": 16.55 + }, + "totalExpense": 331.0, + "netCashFlow": 372.0, + "assetBalance": 4661.0 + }, + { + "year": 2033, + "age": 55, + "income": { + "total": 703 + }, + "expenses": { + "living": 134.8, + "housing": 101.1, + "education": 50.55, + "tax": 33.7, + "event": 16.85 + }, + "totalExpense": 337.0, + "netCashFlow": 366.0, + "assetBalance": 5166.0 + }, + { + "year": 2034, + "age": 56, + "income": { + "total": 703 + }, + "expenses": { + "living": 137.6, + "housing": 103.2, + "education": 51.6, + "tax": 34.4, + "event": 17.2 + }, + "totalExpense": 344.0, + "netCashFlow": 359.0, + "assetBalance": 5680.0 + }, + { + "year": 2035, + "age": 57, + "income": { + "total": 703 + }, + "expenses": { + "living": 140.4, + "housing": 105.3, + "education": 52.65, + "tax": 35.1, + "event": 17.55 + }, + "totalExpense": 351.0, + "netCashFlow": 352.0, + "assetBalance": 6203.0 + }, + { + "year": 2036, + "age": 58, + "income": { + "total": 703 + }, + "expenses": { + "living": 143.20000000000002, + "housing": 107.39999999999999, + "education": 53.699999999999996, + "tax": 35.800000000000004, + "event": 17.900000000000002 + }, + "totalExpense": 358.0, + "netCashFlow": 345.0, + "assetBalance": 6734.0 + }, + { + "year": 2037, + "age": 59, + "income": { + "total": 703 + }, + "expenses": { + "living": 146.0, + "housing": 109.5, + "education": 54.75, + "tax": 36.5, + "event": 18.25 + }, + "totalExpense": 365.0, + "netCashFlow": 338.0, + "assetBalance": 7273.0 + }, + { + "year": 2038, + "age": 60, + "income": { + "total": 0 + }, + "expenses": { + "living": 149.20000000000002, + "housing": 111.89999999999999, + "education": 55.949999999999996, + "tax": 37.300000000000004, + "event": 18.650000000000002 + }, + "totalExpense": 373.0, + "netCashFlow": -373.0, + "assetBalance": 7119.0 + }, + { + "year": 2039, + "age": 61, + "income": { + "total": 0 + }, + "expenses": { + "living": 152.0, + "housing": 114.0, + "education": 57.0, + "tax": 38.0, + "event": 19.0 + }, + "totalExpense": 380.0, + "netCashFlow": -380.0, + "assetBalance": 6953.0 + }, + { + "year": 2040, + "age": 62, + "income": { + "total": 0 + }, + "expenses": { + "living": 155.20000000000002, + "housing": 116.39999999999999, + "education": 58.199999999999996, + "tax": 38.800000000000004, + "event": 19.400000000000002 + }, + "totalExpense": 388.0, + "netCashFlow": -388.0, + "assetBalance": 6774.0 + }, + { + "year": 2041, + "age": 63, + "income": { + "total": 0 + }, + "expenses": { + "living": 158.0, + "housing": 118.5, + "education": 59.25, + "tax": 39.5, + "event": 19.75 + }, + "totalExpense": 395.0, + "netCashFlow": -395.0, + "assetBalance": 6581.0 + }, + { + "year": 2042, + "age": 64, + "income": { + "total": 0 + }, + "expenses": { + "living": 161.20000000000002, + "housing": 120.89999999999999, + "education": 60.449999999999996, + "tax": 40.300000000000004, + "event": 20.150000000000002 + }, + "totalExpense": 403.0, + "netCashFlow": -403.0, + "assetBalance": 6376.0 + }, + { + "year": 2043, + "age": 65, + "income": { + "total": 0 + }, + "expenses": { + "living": 164.4, + "housing": 123.3, + "education": 61.65, + "tax": 41.1, + "event": 20.55 + }, + "totalExpense": 411.0, + "netCashFlow": -411.0, + "assetBalance": 6155.0 + }, + { + "year": 2044, + "age": 66, + "income": { + "total": 0 + }, + "expenses": { + "living": 168.0, + "housing": 126.0, + "education": 63.0, + "tax": 42.0, + "event": 21.0 + }, + "totalExpense": 420.0, + "netCashFlow": -420.0, + "assetBalance": 5921.0 + }, + { + "year": 2045, + "age": 67, + "income": { + "total": 0 + }, + "expenses": { + "living": 171.20000000000002, + "housing": 128.4, + "education": 64.2, + "tax": 42.800000000000004, + "event": 21.400000000000002 + }, + "totalExpense": 428.0, + "netCashFlow": -428.0, + "assetBalance": 5670.0 + }, + { + "year": 2046, + "age": 68, + "income": { + "total": 0 + }, + "expenses": { + "living": 174.8, + "housing": 131.1, + "education": 65.55, + "tax": 43.7, + "event": 21.85 + }, + "totalExpense": 437.0, + "netCashFlow": -437.0, + "assetBalance": 5404.0 + }, + { + "year": 2047, + "age": 69, + "income": { + "total": 0 + }, + "expenses": { + "living": 178.0, + "housing": 133.5, + "education": 66.75, + "tax": 44.5, + "event": 22.25 + }, + "totalExpense": 445.0, + "netCashFlow": -445.0, + "assetBalance": 5121.0 + }, + { + "year": 2048, + "age": 70, + "income": { + "total": 0 + }, + "expenses": { + "living": 181.60000000000002, + "housing": 136.2, + "education": 68.1, + "tax": 45.400000000000006, + "event": 22.700000000000003 + }, + "totalExpense": 454.0, + "netCashFlow": -454.0, + "assetBalance": 4820.0 + }, + { + "year": 2049, + "age": 71, + "income": { + "total": 0 + }, + "expenses": { + "living": 185.20000000000002, + "housing": 138.9, + "education": 69.45, + "tax": 46.300000000000004, + "event": 23.150000000000002 + }, + "totalExpense": 463.0, + "netCashFlow": -463.0, + "assetBalance": 4502.0 + }, + { + "year": 2050, + "age": 72, + "income": { + "total": 0 + }, + "expenses": { + "living": 188.8, + "housing": 141.6, + "education": 70.8, + "tax": 47.2, + "event": 23.6 + }, + "totalExpense": 472.0, + "netCashFlow": -472.0, + "assetBalance": 4164.0 + }, + { + "year": 2051, + "age": 73, + "income": { + "total": 0 + }, + "expenses": { + "living": 192.8, + "housing": 144.6, + "education": 72.3, + "tax": 48.2, + "event": 24.1 + }, + "totalExpense": 482.0, + "netCashFlow": -482.0, + "assetBalance": 3807.0 + }, + { + "year": 2052, + "age": 74, + "income": { + "total": 0 + }, + "expenses": { + "living": 196.8, + "housing": 147.6, + "education": 73.8, + "tax": 49.2, + "event": 24.6 + }, + "totalExpense": 492.0, + "netCashFlow": -492.0, + "assetBalance": 3430.0 + }, + { + "year": 2053, + "age": 75, + "income": { + "total": 0 + }, + "expenses": { + "living": 200.4, + "housing": 150.29999999999998, + "education": 75.14999999999999, + "tax": 50.1, + "event": 25.05 + }, + "totalExpense": 501.0, + "netCashFlow": -501.0, + "assetBalance": 3031.0 + }, + { + "year": 2054, + "age": 76, + "income": { + "total": 0 + }, + "expenses": { + "living": 204.4, + "housing": 153.29999999999998, + "education": 76.64999999999999, + "tax": 51.1, + "event": 25.55 + }, + "totalExpense": 511.0, + "netCashFlow": -511.0, + "assetBalance": 2611.0 + }, + { + "year": 2055, + "age": 77, + "income": { + "total": 0 + }, + "expenses": { + "living": 208.8, + "housing": 156.6, + "education": 78.3, + "tax": 52.2, + "event": 26.1 + }, + "totalExpense": 522.0, + "netCashFlow": -522.0, + "assetBalance": 2167.0 + }, + { + "year": 2056, + "age": 78, + "income": { + "total": 0 + }, + "expenses": { + "living": 212.8, + "housing": 159.6, + "education": 79.8, + "tax": 53.2, + "event": 26.6 + }, + "totalExpense": 532.0, + "netCashFlow": -532.0, + "assetBalance": 1700.0 + }, + { + "year": 2057, + "age": 79, + "income": { + "total": 0 + }, + "expenses": { + "living": 217.20000000000002, + "housing": 162.9, + "education": 81.45, + "tax": 54.300000000000004, + "event": 27.150000000000002 + }, + "totalExpense": 543.0, + "netCashFlow": -543.0, + "assetBalance": 1209.0 + }, + { + "year": 2058, + "age": 80, + "income": { + "total": 0 + }, + "expenses": { + "living": 221.60000000000002, + "housing": 166.2, + "education": 83.1, + "tax": 55.400000000000006, + "event": 27.700000000000003 + }, + "totalExpense": 554.0, + "netCashFlow": -554.0, + "assetBalance": 691.0 + }, + { + "year": 2059, + "age": 81, + "income": { + "total": 0 + }, + "expenses": { + "living": 226.0, + "housing": 169.5, + "education": 84.75, + "tax": 56.5, + "event": 28.25 + }, + "totalExpense": 565.0, + "netCashFlow": -565.0, + "assetBalance": 147.0 + }, + { + "year": 2060, + "age": 82, + "income": { + "total": 0 + }, + "expenses": { + "living": 230.4, + "housing": 172.79999999999998, + "education": 86.39999999999999, + "tax": 57.6, + "event": 28.8 + }, + "totalExpense": 576.0, + "netCashFlow": -576.0, + "assetBalance": -424.0 + }, + { + "year": 2061, + "age": 83, + "income": { + "total": 0 + }, + "expenses": { + "living": 234.8, + "housing": 176.1, + "education": 88.05, + "tax": 58.7, + "event": 29.35 + }, + "totalExpense": 587.0, + "netCashFlow": -587.0, + "assetBalance": -1075.0 + }, + { + "year": 2062, + "age": 84, + "income": { + "total": 0 + }, + "expenses": { + "living": 239.60000000000002, + "housing": 179.7, + "education": 89.85, + "tax": 59.900000000000006, + "event": 29.950000000000003 + }, + "totalExpense": 599.0, + "netCashFlow": -599.0, + "assetBalance": -1836.0 + }, + { + "year": 2063, + "age": 85, + "income": { + "total": 0 + }, + "expenses": { + "living": 244.4, + "housing": 183.29999999999998, + "education": 91.64999999999999, + "tax": 61.1, + "event": 30.55 + }, + "totalExpense": 611.0, + "netCashFlow": -611.0, + "assetBalance": -2723.0 + }, + { + "year": 2064, + "age": 86, + "income": { + "total": 0 + }, + "expenses": { + "living": 249.20000000000002, + "housing": 186.9, + "education": 93.45, + "tax": 62.300000000000004, + "event": 31.150000000000002 + }, + "totalExpense": 623.0, + "netCashFlow": -623.0, + "assetBalance": -3754.0 + }, + { + "year": 2065, + "age": 87, + "income": { + "total": 0 + }, + "expenses": { + "living": 254.4, + "housing": 190.79999999999998, + "education": 95.39999999999999, + "tax": 63.6, + "event": 31.8 + }, + "totalExpense": 636.0, + "netCashFlow": -636.0, + "assetBalance": -4954.0 + }, + { + "year": 2066, + "age": 88, + "income": { + "total": 0 + }, + "expenses": { + "living": 259.6, + "housing": 194.7, + "education": 97.35, + "tax": 64.9, + "event": 32.45 + }, + "totalExpense": 649.0, + "netCashFlow": -649.0, + "assetBalance": -6345.0 + }, + { + "year": 2067, + "age": 89, + "income": { + "total": 0 + }, + "expenses": { + "living": 264.8, + "housing": 198.6, + "education": 99.3, + "tax": 66.2, + "event": 33.1 + }, + "totalExpense": 662.0, + "netCashFlow": -662.0, + "assetBalance": -7959.0 + }, + { + "year": 2068, + "age": 90, + "income": { + "total": 0 + }, + "expenses": { + "living": 270.0, + "housing": 202.5, + "education": 101.25, + "tax": 67.5, + "event": 33.75 + }, + "totalExpense": 675.0, + "netCashFlow": -675.0, + "assetBalance": -9827.0 + }, + { + "year": 2069, + "age": 91, + "income": { + "total": 0 + }, + "expenses": { + "living": 275.2, + "housing": 206.4, + "education": 103.2, + "tax": 68.8, + "event": 34.4 + }, + "totalExpense": 688.0, + "netCashFlow": -688.0, + "assetBalance": -11990.0 + }, + { + "year": 2070, + "age": 92, + "income": { + "total": 0 + }, + "expenses": { + "living": 280.8, + "housing": 210.6, + "education": 105.3, + "tax": 70.2, + "event": 35.1 + }, + "totalExpense": 702.0, + "netCashFlow": -702.0, + "assetBalance": -14490.0 + }, + { + "year": 2071, + "age": 93, + "income": { + "total": 0 + }, + "expenses": { + "living": 286.40000000000003, + "housing": 214.79999999999998, + "education": 107.39999999999999, + "tax": 71.60000000000001, + "event": 35.800000000000004 + }, + "totalExpense": 716.0, + "netCashFlow": -716.0, + "assetBalance": -17380.0 + }, + { + "year": 2072, + "age": 94, + "income": { + "total": 0 + }, + "expenses": { + "living": 292.0, + "housing": 219.0, + "education": 109.5, + "tax": 73.0, + "event": 36.5 + }, + "totalExpense": 730.0, + "netCashFlow": -730.0, + "assetBalance": -20717.0 + }, + { + "year": 2073, + "age": 95, + "income": { + "total": 0 + }, + "expenses": { + "living": 298.0, + "housing": 223.5, + "education": 111.75, + "tax": 74.5, + "event": 37.25 + }, + "totalExpense": 745.0, + "netCashFlow": -745.0, + "assetBalance": -24570.0 + }, + { + "year": 2074, + "age": 96, + "income": { + "total": 0 + }, + "expenses": { + "living": 304.0, + "housing": 228.0, + "education": 114.0, + "tax": 76.0, + "event": 38.0 + }, + "totalExpense": 760.0, + "netCashFlow": -760.0, + "assetBalance": -29015.0 + }, + { + "year": 2075, + "age": 97, + "income": { + "total": 0 + }, + "expenses": { + "living": 310.0, + "housing": 232.5, + "education": 116.25, + "tax": 77.5, + "event": 38.75 + }, + "totalExpense": 775.0, + "netCashFlow": -775.0, + "assetBalance": -34143.0 + }, + { + "year": 2076, + "age": 98, + "income": { + "total": 0 + }, + "expenses": { + "living": 316.40000000000003, + "housing": 237.29999999999998, + "education": 118.64999999999999, + "tax": 79.10000000000001, + "event": 39.550000000000004 + }, + "totalExpense": 791.0, + "netCashFlow": -791.0, + "assetBalance": -40055.0 + }, + { + "year": 2077, + "age": 99, + "income": { + "total": 0 + }, + "expenses": { + "living": 322.40000000000003, + "housing": 241.79999999999998, + "education": 120.89999999999999, + "tax": 80.60000000000001, + "event": 40.300000000000004 + }, + "totalExpense": 806.0, + "netCashFlow": -806.0, + "assetBalance": -46870.0 + }, + { + "year": 2078, + "age": 100, + "income": { + "total": 0 + }, + "expenses": { + "living": 329.20000000000005, + "housing": 246.89999999999998, + "education": 123.44999999999999, + "tax": 82.30000000000001, + "event": 41.150000000000006 + }, + "totalExpense": 823.0, + "netCashFlow": -823.0, + "assetBalance": -54723.0 + } + ], + "meta": { + "currencyUnit": "万円" + } + } + }, + "script": [ + { + "id": "intro", + "text": "皆さん、こんにちは!今日の動画では、素敵なご家族、テストさん一家をご紹介します。将来設計の第一歩として、まずはご家族一人ひとりの魅力に迫りましょう。", + "duration": 13.008, + "visualType": "pdf_page", + "pdfPageIndex": 0, + "highlightArea": "full", + "audioPath": "public/pdf_narration/narration_intro.mp3" + }, + { + "id": "rep_intro", + "text": "まずは、一家の代表、テスト太郎さん。47歳という働き盛りの年齢で、年収は703万円。多趣味でアクティブな太郎さんは、ご家族を支える大黒柱です。持ち前の明るさと決断力で、家族を牽引しています。", + "duration": 17.568, + "visualType": "pdf_page", + "pdfPageIndex": 0, + "highlightArea": "full", + "audioPath": "public/pdf_narration/narration_rep_intro.mp3" + }, + { + "id": "spouse_intro", + "text": "続いて、太郎さんの素敵なパートナー、奥様のテスト花子さん。37歳という若さで、ご家庭を支えるしっかり者。花子さんの存在は、ご家族にとってかけがえのない心の支えとなっています。", + "duration": 15.648, + "visualType": "pdf_page", + "pdfPageIndex": 0, + "highlightArea": "full", + "audioPath": "public/pdf_narration/narration_spouse_intro.mp3" + }, + { + "id": "child_intro", + "text": "そして、ご家族の宝物、7歳になるお子様のテスト健太くん。小学校入学を控え、これからますます成長が楽しみですね。健太くんの将来のため、教育プランも視野に入れて考えていきましょう。", + "duration": 15.984, + "visualType": "pdf_page", + "pdfPageIndex": 0, + "highlightArea": "full", + "audioPath": "public/pdf_narration/narration_child_intro.mp3" + }, + { + "id": "family_summary", + "text": "このように、テストさんご一家は、それぞれの個性が光る、温かい家族です。この素敵なご家族の未来のために、最適なプランを一緒に考えていきましょう。", + "duration": 12.216, + "visualType": "pdf_page", + "pdfPageIndex": 0, + "highlightArea": "full", + "audioPath": "public/pdf_narration/narration_family_summary.mp3" + } + ], + "assets": { + "pdfPages": [ + { + "index": 0, + "image_path": "public/pdf_pages/pdf_page_001.png", + "description": "PDF Page 1" + }, + { + "index": 1, + "image_path": "public/pdf_pages/pdf_page_002.png", + "description": "PDF Page 2" + }, + { + "index": 2, + "image_path": "public/pdf_pages/pdf_page_003.png", + "description": "PDF Page 3" + }, + { + "index": 3, + "image_path": "public/pdf_pages/pdf_page_004.png", + "description": "PDF Page 4" + }, + { + "index": 4, + "image_path": "public/pdf_pages/pdf_page_005.png", + "description": "PDF Page 5" + }, + { + "index": 5, + "image_path": "public/pdf_pages/pdf_page_006.png", + "description": "PDF Page 6" + }, + { + "index": 6, + "image_path": "public/pdf_pages/pdf_page_007.png", + "description": "PDF Page 7" + }, + { + "index": 7, + "image_path": "public/pdf_pages/pdf_page_008.png", + "description": "PDF Page 8" + }, + { + "index": 8, + "image_path": "public/pdf_pages/pdf_page_009.png", + "description": "PDF Page 9" + }, + { + "index": 9, + "image_path": "public/pdf_pages/pdf_page_010.png", + "description": "PDF Page 10" + }, + { + "index": 10, + "image_path": "public/pdf_pages/pdf_page_011.png", + "description": "PDF Page 11" + }, + { + "index": 11, + "image_path": "public/pdf_pages/pdf_page_012.png", + "description": "PDF Page 12" + }, + { + "index": 12, + "image_path": "public/pdf_pages/pdf_page_013.png", + "description": "PDF Page 13" + }, + { + "index": 13, + "image_path": "public/pdf_pages/pdf_page_014.png", + "description": "PDF Page 14" + }, + { + "index": 14, + "image_path": "public/pdf_pages/pdf_page_015.png", + "description": "PDF Page 15" + }, + { + "index": 15, + "image_path": "public/pdf_pages/pdf_page_016.png", + "description": "PDF Page 16" + }, + { + "index": 16, + "image_path": "public/pdf_pages/pdf_page_017.png", + "description": "PDF Page 17" + }, + { + "index": 17, + "image_path": "public/pdf_pages/pdf_page_018.png", + "description": "PDF Page 18" + }, + { + "index": 18, + "image_path": "public/pdf_pages/pdf_page_019.png", + "description": "PDF Page 19" + }, + { + "index": 19, + "image_path": "public/pdf_pages/pdf_page_020.png", + "description": "PDF Page 20" + }, + { + "index": 20, + "image_path": "public/pdf_pages/pdf_page_021.png", + "description": "PDF Page 21" + }, + { + "index": 21, + "image_path": "public/pdf_pages/pdf_page_022.png", + "description": "PDF Page 22" + }, + { + "index": 22, + "image_path": "public/pdf_pages/pdf_page_023.png", + "description": "PDF Page 23" + }, + { + "index": 23, + "image_path": "public/pdf_pages/pdf_page_024.png", + "description": "PDF Page 24" + }, + { + "index": 24, + "image_path": "public/pdf_pages/pdf_page_025.png", + "description": "PDF Page 25" + }, + { + "index": 25, + "image_path": "public/pdf_pages/pdf_page_026.png", + "description": "PDF Page 26" + }, + { + "index": 26, + "image_path": "public/pdf_pages/pdf_page_027.png", + "description": "PDF Page 27" + }, + { + "index": 27, + "image_path": "public/pdf_pages/pdf_page_028.png", + "description": "PDF Page 28" + }, + { + "index": 28, + "image_path": "public/pdf_pages/pdf_page_029.png", + "description": "PDF Page 29" + }, + { + "index": 29, + "image_path": "public/pdf_pages/pdf_page_030.png", + "description": "PDF Page 30" + }, + { + "index": 30, + "image_path": "public/pdf_pages/pdf_page_031.png", + "description": "PDF Page 31" + }, + { + "index": 31, + "image_path": "public/pdf_pages/pdf_page_032.png", + "description": "PDF Page 32" + }, + { + "index": 32, + "image_path": "public/pdf_pages/pdf_page_033.png", + "description": "PDF Page 33" + }, + { + "index": 33, + "image_path": "public/pdf_pages/pdf_page_034.png", + "description": "PDF Page 34" + }, + { + "index": 34, + "image_path": "public/pdf_pages/pdf_page_035.png", + "description": "PDF Page 35" + }, + { + "index": 35, + "image_path": "public/pdf_pages/pdf_page_036.png", + "description": "PDF Page 36" + }, + { + "index": 36, + "image_path": "public/pdf_pages/pdf_page_037.png", + "description": "PDF Page 37" + }, + { + "index": 37, + "image_path": "public/pdf_pages/pdf_page_038.png", + "description": "PDF Page 38" + }, + { + "index": 38, + "image_path": "public/pdf_pages/pdf_page_039.png", + "description": "PDF Page 39" + }, + { + "index": 39, + "image_path": "public/pdf_pages/pdf_page_040.png", + "description": "PDF Page 40" + }, + { + "index": 40, + "image_path": "public/pdf_pages/pdf_page_041.png", + "description": "PDF Page 41" + }, + { + "index": 41, + "image_path": "public/pdf_pages/pdf_page_042.png", + "description": "PDF Page 42" + }, + { + "index": 42, + "image_path": "public/pdf_pages/pdf_page_043.png", + "description": "PDF Page 43" + }, + { + "index": 43, + "image_path": "public/pdf_pages/pdf_page_044.png", + "description": "PDF Page 44" + }, + { + "index": 44, + "image_path": "public/pdf_pages/pdf_page_045.png", + "description": "PDF Page 45" + }, + { + "index": 45, + "image_path": "public/pdf_pages/pdf_page_046.png", + "description": "PDF Page 46" + }, + { + "index": 46, + "image_path": "public/pdf_pages/pdf_page_047.png", + "description": "PDF Page 47" + }, + { + "index": 47, + "image_path": "public/pdf_pages/pdf_page_048.png", + "description": "PDF Page 48" + }, + { + "index": 48, + "image_path": "public/pdf_pages/pdf_page_049.png", + "description": "PDF Page 49" + }, + { + "index": 49, + "image_path": "public/pdf_pages/pdf_page_050.png", + "description": "PDF Page 50" + }, + { + "index": 50, + "image_path": "public/pdf_pages/pdf_page_051.png", + "description": "PDF Page 51" + }, + { + "index": 51, + "image_path": "public/pdf_pages/pdf_page_052.png", + "description": "PDF Page 52" + }, + { + "index": 52, + "image_path": "public/pdf_pages/pdf_page_053.png", + "description": "PDF Page 53" + }, + { + "index": 53, + "image_path": "public/pdf_pages/pdf_page_054.png", + "description": "PDF Page 54" + }, + { + "index": 54, + "image_path": "public/pdf_pages/pdf_page_055.png", + "description": "PDF Page 55" + }, + { + "index": 55, + "image_path": "public/pdf_pages/pdf_page_056.png", + "description": "PDF Page 56" + }, + { + "index": 56, + "image_path": "public/pdf_pages/pdf_page_057.png", + "description": "PDF Page 57" + }, + { + "index": 57, + "image_path": "public/pdf_pages/pdf_page_058.png", + "description": "PDF Page 58" + }, + { + "index": 58, + "image_path": "public/pdf_pages/pdf_page_059.png", + "description": "PDF Page 59" + }, + { + "index": 59, + "image_path": "public/pdf_pages/pdf_page_060.png", + "description": "PDF Page 60" + }, + { + "index": 60, + "image_path": "public/pdf_pages/pdf_page_061.png", + "description": "PDF Page 61" + }, + { + "index": 61, + "image_path": "public/pdf_pages/pdf_page_062.png", + "description": "PDF Page 62" + }, + { + "index": 62, + "image_path": "public/pdf_pages/pdf_page_063.png", + "description": "PDF Page 63" + }, + { + "index": 63, + "image_path": "public/pdf_pages/pdf_page_064.png", + "description": "PDF Page 64" + }, + { + "index": 64, + "image_path": "public/pdf_pages/pdf_page_065.png", + "description": "PDF Page 65" + }, + { + "index": 65, + "image_path": "public/pdf_pages/pdf_page_066.png", + "description": "PDF Page 66" + }, + { + "index": 66, + "image_path": "public/pdf_pages/pdf_page_067.png", + "description": "PDF Page 67" + }, + { + "index": 67, + "image_path": "public/pdf_pages/pdf_page_068.png", + "description": "PDF Page 68" + }, + { + "index": 68, + "image_path": "public/pdf_pages/pdf_page_069.png", + "description": "PDF Page 69" + }, + { + "index": 69, + "image_path": "public/pdf_pages/pdf_page_070.png", + "description": "PDF Page 70" + }, + { + "index": 70, + "image_path": "public/pdf_pages/pdf_page_071.png", + "description": "PDF Page 71" + }, + { + "index": 71, + "image_path": "public/pdf_pages/pdf_page_072.png", + "description": "PDF Page 72" + }, + { + "index": 72, + "image_path": "public/pdf_pages/pdf_page_073.png", + "description": "PDF Page 73" + }, + { + "index": 73, + "image_path": "public/pdf_pages/pdf_page_074.png", + "description": "PDF Page 74" + }, + { + "index": 74, + "image_path": "public/pdf_pages/pdf_page_075.png", + "description": "PDF Page 75" + }, + { + "index": 75, + "image_path": "public/pdf_pages/pdf_page_076.png", + "description": "PDF Page 76" + }, + { + "index": 76, + "image_path": "public/pdf_pages/pdf_page_077.png", + "description": "PDF Page 77" + }, + { + "index": 77, + "image_path": "public/pdf_pages/pdf_page_078.png", + "description": "PDF Page 78" + }, + { + "index": 78, + "image_path": "public/pdf_pages/pdf_page_079.png", + "description": "PDF Page 79" + }, + { + "index": 79, + "image_path": "public/pdf_pages/pdf_page_080.png", + "description": "PDF Page 80" + }, + { + "index": 80, + "image_path": "public/pdf_pages/pdf_page_081.png", + "description": "PDF Page 81" + } + ], + "slides": [], + "videoClips": [ + { + "id": "clip_1", + "outputPath": "public\\clip_1_13.0-18.0.mp4", + "filepath": "public\\clip_1_13.0-18.0.mp4", + "start": 13.0, + "end": 18.0, + "duration": 5.0, + "description": "すいませんが、お客様のお名前からお願いいたします。\nはい、私がテストテロとして、家族情報として、\n生年月日の方は?\nはい、生年月日の方は、1980年の1月の1日です。" + }, + { + "id": "clip_2", + "outputPath": "public\\clip_2_52.0-57.0.mp4", + "filepath": "public\\clip_2_52.0-57.0.mp4", + "start": 52.0, + "end": 57.0, + "duration": 5.0, + "description": "すいませんが、前代の、ざっくりでよろしいので、年収はどのくらいになりますでしょうか。\n年収が今700万くらいですね。" + }, + { + "id": "clip_3", + "outputPath": "public\\clip_3_71.0-76.0.mp4", + "filepath": "public\\clip_3_71.0-76.0.mp4", + "start": 71.0, + "end": 76.0, + "duration": 5.0, + "description": "下の名前だけでいいので、奥様のお名前をお願いいたします。\n花子です。\nはい。奥様の生年月日を教えていただけますか。\n1990年の1月の10日です。" + } + ], + "broll": { + "Japanese family sitting together": "Family Gathering_5856567.mp4", + "Japanese couple calculating budget": "Budgeting Couple_7958685.mp4", + "Japanese man explaining feelings": "Expressing Feelings_7957918.mp4", + "Asian man nodding in agreement": "Nodding In Agreement_4586579.mp4", + "Japanese retired couple smiling": "Smiling Retirees_6761158.mp4", + "Japanese family visiting a new car": "Car Shopping_31980658.mp4", + "Japanese consultant pointing at document": "Consultant Pointing_7844849.mp4", + "Japanese advisor asking about family": "Advisor Inquiring_7844849.mp4", + "Asian man giving his birthday": "Giving Birthday_5529618.mp4", + "Japanese businessman greeting warmly": "Warm Greeting_3304352.mp4", + "Japanese student studying hard": "Studying Hard_7958453.mp4", + "Japanese calendar with events marked": "Marked Calendar_9057559.mp4", + "Japanese financial planner verifying age": "Verifying Age_6539952.mp4", + "Japanese advisor bowing politely": "Polite Bowing_7958678.mp4", + "Japanese man introduced himself": "Self-Introduction_7958453.mp4", + "Japanese financial consultant showing graphs": "Showing Graphs_7844858.mp4", + "Japanese financial advisor consulting client": "Client Consulting_4486777.mp4", + "Japanese man talking in interview": "Interview Talking_4428754.mp4" + } + } +} \ No newline at end of file diff --git a/assets/1_processed/render_props_ppt_intro_final.json b/assets/1_processed/render_props_ppt_intro_final.json new file mode 100644 index 0000000..3cd234b --- /dev/null +++ b/assets/1_processed/render_props_ppt_intro_final.json @@ -0,0 +1,1858 @@ +{ + "meta": { + "title": "テスト太郎様 ライフプラン紹介", + "currencyUnit": "万円", + "duration": 166.128, + "clientName": "テスト太郎" + }, + "charts": { + "assetDepletion": { + "timeline": [ + { + "year": 2025, + "ages": { + "rep": 47, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 288.0, + "assetBalance": 1349.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2026, + "ages": { + "rep": 48, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 294.0, + "assetBalance": 1799.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2027, + "ages": { + "rep": 49, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 300.0, + "assetBalance": 2256.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2028, + "ages": { + "rep": 50, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 306.0, + "assetBalance": 2721.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2029, + "ages": { + "rep": 51, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 312.0, + "assetBalance": 3194.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2030, + "ages": { + "rep": 52, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 318.0, + "assetBalance": 3675.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2031, + "ages": { + "rep": 53, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 324.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2032, + "ages": { + "rep": 54, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 331.0, + "assetBalance": 4661.0 + }, + "events": [ + "Event", + "Event" + ], + "isCritical": false + }, + { + "year": 2033, + "ages": { + "rep": 55, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 337.0, + "assetBalance": 5166.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2034, + "ages": { + "rep": 56, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 344.0, + "assetBalance": 5680.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2035, + "ages": { + "rep": 57, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 351.0, + "assetBalance": 6203.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2036, + "ages": { + "rep": 58, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 358.0, + "assetBalance": 6734.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2037, + "ages": { + "rep": 59, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 365.0, + "assetBalance": 7273.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2038, + "ages": { + "rep": 60, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 373.0, + "assetBalance": 7119.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2039, + "ages": { + "rep": 61, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 380.0, + "assetBalance": 6953.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2040, + "ages": { + "rep": 62, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 388.0, + "assetBalance": 6774.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2041, + "ages": { + "rep": 63, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 395.0, + "assetBalance": 6581.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2042, + "ages": { + "rep": 64, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 403.0, + "assetBalance": 6376.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2043, + "ages": { + "rep": 65, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 411.0, + "assetBalance": 6155.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2044, + "ages": { + "rep": 66, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 420.0, + "assetBalance": 5921.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2045, + "ages": { + "rep": 67, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 428.0, + "assetBalance": 5670.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2046, + "ages": { + "rep": 68, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 437.0, + "assetBalance": 5404.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2047, + "ages": { + "rep": 69, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 445.0, + "assetBalance": 5121.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2048, + "ages": { + "rep": 70, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 454.0, + "assetBalance": 4820.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2049, + "ages": { + "rep": 71, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 463.0, + "assetBalance": 4502.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2050, + "ages": { + "rep": 72, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 472.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2051, + "ages": { + "rep": 73, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 482.0, + "assetBalance": 3807.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2052, + "ages": { + "rep": 74, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 492.0, + "assetBalance": 3430.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2053, + "ages": { + "rep": 75, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 501.0, + "assetBalance": 3031.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2054, + "ages": { + "rep": 76, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 511.0, + "assetBalance": 2611.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2055, + "ages": { + "rep": 77, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 522.0, + "assetBalance": 2167.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2056, + "ages": { + "rep": 78, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 532.0, + "assetBalance": 1700.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2057, + "ages": { + "rep": 79, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 543.0, + "assetBalance": 1209.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2058, + "ages": { + "rep": 80, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 554.0, + "assetBalance": 691.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2059, + "ages": { + "rep": 81, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 565.0, + "assetBalance": 147.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2060, + "ages": { + "rep": 82, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 576.0, + "assetBalance": -424.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2061, + "ages": { + "rep": 83, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 587.0, + "assetBalance": -1075.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2062, + "ages": { + "rep": 84, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 599.0, + "assetBalance": -1836.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2063, + "ages": { + "rep": 85, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 611.0, + "assetBalance": -2723.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2064, + "ages": { + "rep": 86, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 623.0, + "assetBalance": -3754.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2065, + "ages": { + "rep": 87, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 636.0, + "assetBalance": -4954.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2066, + "ages": { + "rep": 88, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 649.0, + "assetBalance": -6345.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2067, + "ages": { + "rep": 89, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 662.0, + "assetBalance": -7959.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2068, + "ages": { + "rep": 90, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 675.0, + "assetBalance": -9827.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2069, + "ages": { + "rep": 91, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 688.0, + "assetBalance": -11990.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2070, + "ages": { + "rep": 92, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 702.0, + "assetBalance": -14490.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2071, + "ages": { + "rep": 93, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 716.0, + "assetBalance": -17380.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2072, + "ages": { + "rep": 94, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 730.0, + "assetBalance": -20717.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2073, + "ages": { + "rep": 95, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 745.0, + "assetBalance": -24570.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2074, + "ages": { + "rep": 96, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 760.0, + "assetBalance": -29015.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2075, + "ages": { + "rep": 97, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 775.0, + "assetBalance": -34143.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2076, + "ages": { + "rep": 98, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 791.0, + "assetBalance": -40055.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2077, + "ages": { + "rep": 99, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 806.0, + "assetBalance": -46870.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2078, + "ages": { + "rep": 100, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 823.0, + "assetBalance": -54723.0 + }, + "events": [], + "isCritical": true + } + ], + "meta": { + "currencyUnit": "万円", + "startYear": 2025 + } + }, + "cashFlow": { + "timeline": [ + { + "year": 2025, + "age": 47, + "income": { + "total": 703 + }, + "expenses": { + "living": 115.2, + "housing": 86.39999999999999, + "education": 43.199999999999996, + "tax": 28.8, + "event": 14.4 + }, + "totalExpense": 288.0, + "netCashFlow": 415.0, + "assetBalance": 1349.0 + }, + { + "year": 2026, + "age": 48, + "income": { + "total": 703 + }, + "expenses": { + "living": 117.60000000000001, + "housing": 88.2, + "education": 44.1, + "tax": 29.400000000000002, + "event": 14.700000000000001 + }, + "totalExpense": 294.0, + "netCashFlow": 409.0, + "assetBalance": 1799.0 + }, + { + "year": 2027, + "age": 49, + "income": { + "total": 703 + }, + "expenses": { + "living": 120.0, + "housing": 90.0, + "education": 45.0, + "tax": 30.0, + "event": 15.0 + }, + "totalExpense": 300.0, + "netCashFlow": 403.0, + "assetBalance": 2256.0 + }, + { + "year": 2028, + "age": 50, + "income": { + "total": 703 + }, + "expenses": { + "living": 122.4, + "housing": 91.8, + "education": 45.9, + "tax": 30.6, + "event": 15.3 + }, + "totalExpense": 306.0, + "netCashFlow": 397.0, + "assetBalance": 2721.0 + }, + { + "year": 2029, + "age": 51, + "income": { + "total": 703 + }, + "expenses": { + "living": 124.80000000000001, + "housing": 93.6, + "education": 46.8, + "tax": 31.200000000000003, + "event": 15.600000000000001 + }, + "totalExpense": 312.0, + "netCashFlow": 391.0, + "assetBalance": 3194.0 + }, + { + "year": 2030, + "age": 52, + "income": { + "total": 703 + }, + "expenses": { + "living": 127.2, + "housing": 95.39999999999999, + "education": 47.699999999999996, + "tax": 31.8, + "event": 15.9 + }, + "totalExpense": 318.0, + "netCashFlow": 385.0, + "assetBalance": 3675.0 + }, + { + "year": 2031, + "age": 53, + "income": { + "total": 703 + }, + "expenses": { + "living": 129.6, + "housing": 97.2, + "education": 48.6, + "tax": 32.4, + "event": 16.2 + }, + "totalExpense": 324.0, + "netCashFlow": 379.0, + "assetBalance": 4164.0 + }, + { + "year": 2032, + "age": 54, + "income": { + "total": 703 + }, + "expenses": { + "living": 132.4, + "housing": 99.3, + "education": 49.65, + "tax": 33.1, + "event": 16.55 + }, + "totalExpense": 331.0, + "netCashFlow": 372.0, + "assetBalance": 4661.0 + }, + { + "year": 2033, + "age": 55, + "income": { + "total": 703 + }, + "expenses": { + "living": 134.8, + "housing": 101.1, + "education": 50.55, + "tax": 33.7, + "event": 16.85 + }, + "totalExpense": 337.0, + "netCashFlow": 366.0, + "assetBalance": 5166.0 + }, + { + "year": 2034, + "age": 56, + "income": { + "total": 703 + }, + "expenses": { + "living": 137.6, + "housing": 103.2, + "education": 51.6, + "tax": 34.4, + "event": 17.2 + }, + "totalExpense": 344.0, + "netCashFlow": 359.0, + "assetBalance": 5680.0 + }, + { + "year": 2035, + "age": 57, + "income": { + "total": 703 + }, + "expenses": { + "living": 140.4, + "housing": 105.3, + "education": 52.65, + "tax": 35.1, + "event": 17.55 + }, + "totalExpense": 351.0, + "netCashFlow": 352.0, + "assetBalance": 6203.0 + }, + { + "year": 2036, + "age": 58, + "income": { + "total": 703 + }, + "expenses": { + "living": 143.20000000000002, + "housing": 107.39999999999999, + "education": 53.699999999999996, + "tax": 35.800000000000004, + "event": 17.900000000000002 + }, + "totalExpense": 358.0, + "netCashFlow": 345.0, + "assetBalance": 6734.0 + }, + { + "year": 2037, + "age": 59, + "income": { + "total": 703 + }, + "expenses": { + "living": 146.0, + "housing": 109.5, + "education": 54.75, + "tax": 36.5, + "event": 18.25 + }, + "totalExpense": 365.0, + "netCashFlow": 338.0, + "assetBalance": 7273.0 + }, + { + "year": 2038, + "age": 60, + "income": { + "total": 0 + }, + "expenses": { + "living": 149.20000000000002, + "housing": 111.89999999999999, + "education": 55.949999999999996, + "tax": 37.300000000000004, + "event": 18.650000000000002 + }, + "totalExpense": 373.0, + "netCashFlow": -373.0, + "assetBalance": 7119.0 + }, + { + "year": 2039, + "age": 61, + "income": { + "total": 0 + }, + "expenses": { + "living": 152.0, + "housing": 114.0, + "education": 57.0, + "tax": 38.0, + "event": 19.0 + }, + "totalExpense": 380.0, + "netCashFlow": -380.0, + "assetBalance": 6953.0 + }, + { + "year": 2040, + "age": 62, + "income": { + "total": 0 + }, + "expenses": { + "living": 155.20000000000002, + "housing": 116.39999999999999, + "education": 58.199999999999996, + "tax": 38.800000000000004, + "event": 19.400000000000002 + }, + "totalExpense": 388.0, + "netCashFlow": -388.0, + "assetBalance": 6774.0 + }, + { + "year": 2041, + "age": 63, + "income": { + "total": 0 + }, + "expenses": { + "living": 158.0, + "housing": 118.5, + "education": 59.25, + "tax": 39.5, + "event": 19.75 + }, + "totalExpense": 395.0, + "netCashFlow": -395.0, + "assetBalance": 6581.0 + }, + { + "year": 2042, + "age": 64, + "income": { + "total": 0 + }, + "expenses": { + "living": 161.20000000000002, + "housing": 120.89999999999999, + "education": 60.449999999999996, + "tax": 40.300000000000004, + "event": 20.150000000000002 + }, + "totalExpense": 403.0, + "netCashFlow": -403.0, + "assetBalance": 6376.0 + }, + { + "year": 2043, + "age": 65, + "income": { + "total": 0 + }, + "expenses": { + "living": 164.4, + "housing": 123.3, + "education": 61.65, + "tax": 41.1, + "event": 20.55 + }, + "totalExpense": 411.0, + "netCashFlow": -411.0, + "assetBalance": 6155.0 + }, + { + "year": 2044, + "age": 66, + "income": { + "total": 0 + }, + "expenses": { + "living": 168.0, + "housing": 126.0, + "education": 63.0, + "tax": 42.0, + "event": 21.0 + }, + "totalExpense": 420.0, + "netCashFlow": -420.0, + "assetBalance": 5921.0 + }, + { + "year": 2045, + "age": 67, + "income": { + "total": 0 + }, + "expenses": { + "living": 171.20000000000002, + "housing": 128.4, + "education": 64.2, + "tax": 42.800000000000004, + "event": 21.400000000000002 + }, + "totalExpense": 428.0, + "netCashFlow": -428.0, + "assetBalance": 5670.0 + }, + { + "year": 2046, + "age": 68, + "income": { + "total": 0 + }, + "expenses": { + "living": 174.8, + "housing": 131.1, + "education": 65.55, + "tax": 43.7, + "event": 21.85 + }, + "totalExpense": 437.0, + "netCashFlow": -437.0, + "assetBalance": 5404.0 + }, + { + "year": 2047, + "age": 69, + "income": { + "total": 0 + }, + "expenses": { + "living": 178.0, + "housing": 133.5, + "education": 66.75, + "tax": 44.5, + "event": 22.25 + }, + "totalExpense": 445.0, + "netCashFlow": -445.0, + "assetBalance": 5121.0 + }, + { + "year": 2048, + "age": 70, + "income": { + "total": 0 + }, + "expenses": { + "living": 181.60000000000002, + "housing": 136.2, + "education": 68.1, + "tax": 45.400000000000006, + "event": 22.700000000000003 + }, + "totalExpense": 454.0, + "netCashFlow": -454.0, + "assetBalance": 4820.0 + }, + { + "year": 2049, + "age": 71, + "income": { + "total": 0 + }, + "expenses": { + "living": 185.20000000000002, + "housing": 138.9, + "education": 69.45, + "tax": 46.300000000000004, + "event": 23.150000000000002 + }, + "totalExpense": 463.0, + "netCashFlow": -463.0, + "assetBalance": 4502.0 + }, + { + "year": 2050, + "age": 72, + "income": { + "total": 0 + }, + "expenses": { + "living": 188.8, + "housing": 141.6, + "education": 70.8, + "tax": 47.2, + "event": 23.6 + }, + "totalExpense": 472.0, + "netCashFlow": -472.0, + "assetBalance": 4164.0 + }, + { + "year": 2051, + "age": 73, + "income": { + "total": 0 + }, + "expenses": { + "living": 192.8, + "housing": 144.6, + "education": 72.3, + "tax": 48.2, + "event": 24.1 + }, + "totalExpense": 482.0, + "netCashFlow": -482.0, + "assetBalance": 3807.0 + }, + { + "year": 2052, + "age": 74, + "income": { + "total": 0 + }, + "expenses": { + "living": 196.8, + "housing": 147.6, + "education": 73.8, + "tax": 49.2, + "event": 24.6 + }, + "totalExpense": 492.0, + "netCashFlow": -492.0, + "assetBalance": 3430.0 + }, + { + "year": 2053, + "age": 75, + "income": { + "total": 0 + }, + "expenses": { + "living": 200.4, + "housing": 150.29999999999998, + "education": 75.14999999999999, + "tax": 50.1, + "event": 25.05 + }, + "totalExpense": 501.0, + "netCashFlow": -501.0, + "assetBalance": 3031.0 + }, + { + "year": 2054, + "age": 76, + "income": { + "total": 0 + }, + "expenses": { + "living": 204.4, + "housing": 153.29999999999998, + "education": 76.64999999999999, + "tax": 51.1, + "event": 25.55 + }, + "totalExpense": 511.0, + "netCashFlow": -511.0, + "assetBalance": 2611.0 + }, + { + "year": 2055, + "age": 77, + "income": { + "total": 0 + }, + "expenses": { + "living": 208.8, + "housing": 156.6, + "education": 78.3, + "tax": 52.2, + "event": 26.1 + }, + "totalExpense": 522.0, + "netCashFlow": -522.0, + "assetBalance": 2167.0 + }, + { + "year": 2056, + "age": 78, + "income": { + "total": 0 + }, + "expenses": { + "living": 212.8, + "housing": 159.6, + "education": 79.8, + "tax": 53.2, + "event": 26.6 + }, + "totalExpense": 532.0, + "netCashFlow": -532.0, + "assetBalance": 1700.0 + }, + { + "year": 2057, + "age": 79, + "income": { + "total": 0 + }, + "expenses": { + "living": 217.20000000000002, + "housing": 162.9, + "education": 81.45, + "tax": 54.300000000000004, + "event": 27.150000000000002 + }, + "totalExpense": 543.0, + "netCashFlow": -543.0, + "assetBalance": 1209.0 + }, + { + "year": 2058, + "age": 80, + "income": { + "total": 0 + }, + "expenses": { + "living": 221.60000000000002, + "housing": 166.2, + "education": 83.1, + "tax": 55.400000000000006, + "event": 27.700000000000003 + }, + "totalExpense": 554.0, + "netCashFlow": -554.0, + "assetBalance": 691.0 + }, + { + "year": 2059, + "age": 81, + "income": { + "total": 0 + }, + "expenses": { + "living": 226.0, + "housing": 169.5, + "education": 84.75, + "tax": 56.5, + "event": 28.25 + }, + "totalExpense": 565.0, + "netCashFlow": -565.0, + "assetBalance": 147.0 + }, + { + "year": 2060, + "age": 82, + "income": { + "total": 0 + }, + "expenses": { + "living": 230.4, + "housing": 172.79999999999998, + "education": 86.39999999999999, + "tax": 57.6, + "event": 28.8 + }, + "totalExpense": 576.0, + "netCashFlow": -576.0, + "assetBalance": -424.0 + }, + { + "year": 2061, + "age": 83, + "income": { + "total": 0 + }, + "expenses": { + "living": 234.8, + "housing": 176.1, + "education": 88.05, + "tax": 58.7, + "event": 29.35 + }, + "totalExpense": 587.0, + "netCashFlow": -587.0, + "assetBalance": -1075.0 + }, + { + "year": 2062, + "age": 84, + "income": { + "total": 0 + }, + "expenses": { + "living": 239.60000000000002, + "housing": 179.7, + "education": 89.85, + "tax": 59.900000000000006, + "event": 29.950000000000003 + }, + "totalExpense": 599.0, + "netCashFlow": -599.0, + "assetBalance": -1836.0 + }, + { + "year": 2063, + "age": 85, + "income": { + "total": 0 + }, + "expenses": { + "living": 244.4, + "housing": 183.29999999999998, + "education": 91.64999999999999, + "tax": 61.1, + "event": 30.55 + }, + "totalExpense": 611.0, + "netCashFlow": -611.0, + "assetBalance": -2723.0 + }, + { + "year": 2064, + "age": 86, + "income": { + "total": 0 + }, + "expenses": { + "living": 249.20000000000002, + "housing": 186.9, + "education": 93.45, + "tax": 62.300000000000004, + "event": 31.150000000000002 + }, + "totalExpense": 623.0, + "netCashFlow": -623.0, + "assetBalance": -3754.0 + }, + { + "year": 2065, + "age": 87, + "income": { + "total": 0 + }, + "expenses": { + "living": 254.4, + "housing": 190.79999999999998, + "education": 95.39999999999999, + "tax": 63.6, + "event": 31.8 + }, + "totalExpense": 636.0, + "netCashFlow": -636.0, + "assetBalance": -4954.0 + }, + { + "year": 2066, + "age": 88, + "income": { + "total": 0 + }, + "expenses": { + "living": 259.6, + "housing": 194.7, + "education": 97.35, + "tax": 64.9, + "event": 32.45 + }, + "totalExpense": 649.0, + "netCashFlow": -649.0, + "assetBalance": -6345.0 + }, + { + "year": 2067, + "age": 89, + "income": { + "total": 0 + }, + "expenses": { + "living": 264.8, + "housing": 198.6, + "education": 99.3, + "tax": 66.2, + "event": 33.1 + }, + "totalExpense": 662.0, + "netCashFlow": -662.0, + "assetBalance": -7959.0 + }, + { + "year": 2068, + "age": 90, + "income": { + "total": 0 + }, + "expenses": { + "living": 270.0, + "housing": 202.5, + "education": 101.25, + "tax": 67.5, + "event": 33.75 + }, + "totalExpense": 675.0, + "netCashFlow": -675.0, + "assetBalance": -9827.0 + }, + { + "year": 2069, + "age": 91, + "income": { + "total": 0 + }, + "expenses": { + "living": 275.2, + "housing": 206.4, + "education": 103.2, + "tax": 68.8, + "event": 34.4 + }, + "totalExpense": 688.0, + "netCashFlow": -688.0, + "assetBalance": -11990.0 + }, + { + "year": 2070, + "age": 92, + "income": { + "total": 0 + }, + "expenses": { + "living": 280.8, + "housing": 210.6, + "education": 105.3, + "tax": 70.2, + "event": 35.1 + }, + "totalExpense": 702.0, + "netCashFlow": -702.0, + "assetBalance": -14490.0 + }, + { + "year": 2071, + "age": 93, + "income": { + "total": 0 + }, + "expenses": { + "living": 286.40000000000003, + "housing": 214.79999999999998, + "education": 107.39999999999999, + "tax": 71.60000000000001, + "event": 35.800000000000004 + }, + "totalExpense": 716.0, + "netCashFlow": -716.0, + "assetBalance": -17380.0 + }, + { + "year": 2072, + "age": 94, + "income": { + "total": 0 + }, + "expenses": { + "living": 292.0, + "housing": 219.0, + "education": 109.5, + "tax": 73.0, + "event": 36.5 + }, + "totalExpense": 730.0, + "netCashFlow": -730.0, + "assetBalance": -20717.0 + }, + { + "year": 2073, + "age": 95, + "income": { + "total": 0 + }, + "expenses": { + "living": 298.0, + "housing": 223.5, + "education": 111.75, + "tax": 74.5, + "event": 37.25 + }, + "totalExpense": 745.0, + "netCashFlow": -745.0, + "assetBalance": -24570.0 + }, + { + "year": 2074, + "age": 96, + "income": { + "total": 0 + }, + "expenses": { + "living": 304.0, + "housing": 228.0, + "education": 114.0, + "tax": 76.0, + "event": 38.0 + }, + "totalExpense": 760.0, + "netCashFlow": -760.0, + "assetBalance": -29015.0 + }, + { + "year": 2075, + "age": 97, + "income": { + "total": 0 + }, + "expenses": { + "living": 310.0, + "housing": 232.5, + "education": 116.25, + "tax": 77.5, + "event": 38.75 + }, + "totalExpense": 775.0, + "netCashFlow": -775.0, + "assetBalance": -34143.0 + }, + { + "year": 2076, + "age": 98, + "income": { + "total": 0 + }, + "expenses": { + "living": 316.40000000000003, + "housing": 237.29999999999998, + "education": 118.64999999999999, + "tax": 79.10000000000001, + "event": 39.550000000000004 + }, + "totalExpense": 791.0, + "netCashFlow": -791.0, + "assetBalance": -40055.0 + }, + { + "year": 2077, + "age": 99, + "income": { + "total": 0 + }, + "expenses": { + "living": 322.40000000000003, + "housing": 241.79999999999998, + "education": 120.89999999999999, + "tax": 80.60000000000001, + "event": 40.300000000000004 + }, + "totalExpense": 806.0, + "netCashFlow": -806.0, + "assetBalance": -46870.0 + }, + { + "year": 2078, + "age": 100, + "income": { + "total": 0 + }, + "expenses": { + "living": 329.20000000000005, + "housing": 246.89999999999998, + "education": 123.44999999999999, + "tax": 82.30000000000001, + "event": 41.150000000000006 + }, + "totalExpense": 823.0, + "netCashFlow": -823.0, + "assetBalance": -54723.0 + } + ], + "meta": { + "currencyUnit": "万円" + } + } + }, + "script": [ + { + "id": "s2_welcome", + "text": "皆様、こんにちは。本日は、テスト太郎様とそのご家族のライフプランについてご紹介させていただきます。まずは、ご家族の基本情報からご覧ください。", + "estimatedDuration": 12, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full", + "duration": 12.168, + "audioPath": "public/ppt_intro_final_audio/narration_s2_welcome.mp3" + }, + { + "id": "s2_representative", + "text": "ご家族の代表者、テスト太郎様は現在47歳。1980年1月1日生まれで、情報通信業界でご活躍されています。年収は703万円と、安定した収入を得ていらっしゃいます。業界の専門知識を活かし、キャリアを積み重ねてこられました。", + "estimatedDuration": 28, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full", + "duration": 20.784, + "audioPath": "public/ppt_intro_final_audio/narration_s2_representative.mp3" + }, + { + "id": "s2_spouse", + "text": "続いて、奥様の花子様は37歳。1990年2月2日生まれで、卸売・小売業でお仕事をされており、年収は368万円です。ご家族を支えながら、ご自身のキャリアも大切にされている、素敵な方です。", + "estimatedDuration": 23, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full", + "duration": 17.352, + "audioPath": "public/ppt_intro_final_audio/narration_s2_spouse.mp3" + }, + { + "id": "s2_child", + "text": "お子様は現在7歳。2020年3月3日生まれで、すくすくと成長されています。教育プランとしては、保育園の認可園からスタートし、公立小学校へ進学。その後、私立中学校での教育を予定されています。お子様の可能性を最大限に伸ばす、しっかりとした教育方針をお持ちです。", + "estimatedDuration": 32, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full", + "duration": 24.264, + "audioPath": "public/ppt_intro_final_audio/narration_s2_child.mp3" + }, + { + "id": "s2_household", + "text": "テスト様ご家族の世帯年収は、合計で1071万円。現在の資産は852万円をお持ちです。年間の支出は1038万円となっており、計画的な家計管理をされています。ご夫婦で力を合わせ、安定した家計を築いていらっしゃいますね。", + "estimatedDuration": 28, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full", + "duration": 20.736, + "audioPath": "public/ppt_intro_final_audio/narration_s2_household.mp3" + }, + { + "id": "s3_transition", + "text": "それでは次に、ご家族の将来に予定されているライフイベントについて見ていきましょう。こちらのスライドをご覧ください。", + "estimatedDuration": 11, + "visualType": "ppt", + "visualAssetIndex": 2, + "highlightArea": "full", + "duration": 9.768, + "audioPath": "public/ppt_intro_final_audio/narration_s3_transition.mp3" + }, + { + "id": "s3_life_events", + "text": "今後、さまざまなライフイベントが控えています。お子様の進学に伴う教育費、マイホームの購入や住宅ローンの返済、そして将来の退職後の生活設計まで。それぞれのイベントには、適切な資金準備が必要です。特に、私立中学校への進学費用や、退職後の生活資金については、長期的な視点での準備が重要となります。", + "estimatedDuration": 35, + "visualType": "ppt", + "visualAssetIndex": 2, + "highlightArea": "full", + "duration": 27.192, + "audioPath": "public/ppt_intro_final_audio/narration_s3_life_events.mp3" + }, + { + "id": "s3_planning", + "text": "私たちファイナンシャルプランナーは、テスト太郎様ご家族の夢や目標を実現するために、最適なライフプランをご提案させていただきます。資産運用、保険の見直し、教育資金の準備、退職後の生活設計まで、トータルでサポートいたします。一緒に、安心で豊かな未来を築いていきましょう。", + "estimatedDuration": 32, + "visualType": "ppt", + "visualAssetIndex": 2, + "highlightArea": "full", + "duration": 24.216, + "audioPath": "public/ppt_intro_final_audio/narration_s3_planning.mp3" + }, + { + "id": "s3_closing", + "text": "ご清聴ありがとうございました。テスト様ご家族の明るい未来のために、これからも全力でサポートさせていただきます。", + "estimatedDuration": 10, + "visualType": "ppt", + "visualAssetIndex": 2, + "highlightArea": "full", + "duration": 9.648, + "audioPath": "public/ppt_intro_final_audio/narration_s3_closing.mp3" + } + ], + "assets": { + "slides": [ + { + "index": 0, + "title": "ライフプラン", + "image_path": "public/slide_001.png" + }, + { + "index": 1, + "title": "2", + "image_path": "public/slide_002.png" + }, + { + "index": 2, + "title": "3", + "image_path": "public/slide_003.png" + }, + { + "index": 3, + "title": "4", + "image_path": "public/slide_004.png" + }, + { + "index": 4, + "title": "5", + "image_path": "public/slide_005.png" + }, + { + "index": 5, + "title": "6", + "image_path": "public/slide_006.png" + }, + { + "index": 6, + "title": "7", + "image_path": "public/slide_007.png" + } + ], + "videoClips": [], + "broll": { + "Japanese family sitting together": "Family Gathering_5856567.mp4", + "Japanese couple calculating budget": "Budgeting Couple_7958685.mp4", + "Japanese man explaining feelings": "Expressing Feelings_7957918.mp4", + "Asian man nodding in agreement": "Nodding In Agreement_4586579.mp4", + "Japanese retired couple smiling": "Smiling Retirees_6761158.mp4", + "Japanese family visiting a new car": "Car Shopping_31980658.mp4", + "Japanese consultant pointing at document": "Consultant Pointing_7844849.mp4", + "Japanese advisor asking about family": "Advisor Inquiring_7844849.mp4", + "Asian man giving his birthday": "Giving Birthday_5529618.mp4", + "Japanese businessman greeting warmly": "Warm Greeting_3304352.mp4", + "Japanese student studying hard": "Studying Hard_7958453.mp4", + "Japanese calendar with events marked": "Marked Calendar_9057559.mp4", + "Japanese financial planner verifying age": "Verifying Age_6539952.mp4", + "Japanese advisor bowing politely": "Polite Bowing_7958678.mp4", + "Japanese man introduced himself": "Self-Introduction_7958453.mp4", + "Japanese financial consultant showing graphs": "Showing Graphs_7844858.mp4", + "Japanese financial advisor consulting client": "Client Consulting_4486777.mp4", + "Japanese man talking in interview": "Interview Talking_4428754.mp4" + } + } +} \ No newline at end of file diff --git a/assets/1_processed/render_props_ppt_slides.json b/assets/1_processed/render_props_ppt_slides.json new file mode 100644 index 0000000..c4bcbff --- /dev/null +++ b/assets/1_processed/render_props_ppt_slides.json @@ -0,0 +1,1804 @@ +{ + "meta": { + "title": "テスト太郎様 ライフプラン紹介", + "currencyUnit": "万円", + "duration": 68.016, + "clientName": "テスト太郎" + }, + "charts": { + "assetDepletion": { + "timeline": [ + { + "year": 2025, + "ages": { + "rep": 47, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 288.0, + "assetBalance": 1349.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2026, + "ages": { + "rep": 48, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 294.0, + "assetBalance": 1799.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2027, + "ages": { + "rep": 49, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 300.0, + "assetBalance": 2256.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2028, + "ages": { + "rep": 50, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 306.0, + "assetBalance": 2721.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2029, + "ages": { + "rep": 51, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 312.0, + "assetBalance": 3194.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2030, + "ages": { + "rep": 52, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 318.0, + "assetBalance": 3675.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2031, + "ages": { + "rep": 53, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 324.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2032, + "ages": { + "rep": 54, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 331.0, + "assetBalance": 4661.0 + }, + "events": [ + "Event", + "Event" + ], + "isCritical": false + }, + { + "year": 2033, + "ages": { + "rep": 55, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 337.0, + "assetBalance": 5166.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2034, + "ages": { + "rep": 56, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 344.0, + "assetBalance": 5680.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2035, + "ages": { + "rep": 57, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 351.0, + "assetBalance": 6203.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2036, + "ages": { + "rep": 58, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 358.0, + "assetBalance": 6734.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2037, + "ages": { + "rep": 59, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 365.0, + "assetBalance": 7273.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2038, + "ages": { + "rep": 60, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 373.0, + "assetBalance": 7119.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2039, + "ages": { + "rep": 61, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 380.0, + "assetBalance": 6953.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2040, + "ages": { + "rep": 62, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 388.0, + "assetBalance": 6774.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2041, + "ages": { + "rep": 63, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 395.0, + "assetBalance": 6581.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2042, + "ages": { + "rep": 64, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 403.0, + "assetBalance": 6376.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2043, + "ages": { + "rep": 65, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 411.0, + "assetBalance": 6155.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2044, + "ages": { + "rep": 66, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 420.0, + "assetBalance": 5921.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2045, + "ages": { + "rep": 67, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 428.0, + "assetBalance": 5670.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2046, + "ages": { + "rep": 68, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 437.0, + "assetBalance": 5404.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2047, + "ages": { + "rep": 69, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 445.0, + "assetBalance": 5121.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2048, + "ages": { + "rep": 70, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 454.0, + "assetBalance": 4820.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2049, + "ages": { + "rep": 71, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 463.0, + "assetBalance": 4502.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2050, + "ages": { + "rep": 72, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 472.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2051, + "ages": { + "rep": 73, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 482.0, + "assetBalance": 3807.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2052, + "ages": { + "rep": 74, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 492.0, + "assetBalance": 3430.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2053, + "ages": { + "rep": 75, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 501.0, + "assetBalance": 3031.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2054, + "ages": { + "rep": 76, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 511.0, + "assetBalance": 2611.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2055, + "ages": { + "rep": 77, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 522.0, + "assetBalance": 2167.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2056, + "ages": { + "rep": 78, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 532.0, + "assetBalance": 1700.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2057, + "ages": { + "rep": 79, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 543.0, + "assetBalance": 1209.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2058, + "ages": { + "rep": 80, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 554.0, + "assetBalance": 691.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2059, + "ages": { + "rep": 81, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 565.0, + "assetBalance": 147.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2060, + "ages": { + "rep": 82, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 576.0, + "assetBalance": -424.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2061, + "ages": { + "rep": 83, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 587.0, + "assetBalance": -1075.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2062, + "ages": { + "rep": 84, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 599.0, + "assetBalance": -1836.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2063, + "ages": { + "rep": 85, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 611.0, + "assetBalance": -2723.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2064, + "ages": { + "rep": 86, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 623.0, + "assetBalance": -3754.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2065, + "ages": { + "rep": 87, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 636.0, + "assetBalance": -4954.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2066, + "ages": { + "rep": 88, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 649.0, + "assetBalance": -6345.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2067, + "ages": { + "rep": 89, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 662.0, + "assetBalance": -7959.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2068, + "ages": { + "rep": 90, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 675.0, + "assetBalance": -9827.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2069, + "ages": { + "rep": 91, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 688.0, + "assetBalance": -11990.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2070, + "ages": { + "rep": 92, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 702.0, + "assetBalance": -14490.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2071, + "ages": { + "rep": 93, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 716.0, + "assetBalance": -17380.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2072, + "ages": { + "rep": 94, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 730.0, + "assetBalance": -20717.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2073, + "ages": { + "rep": 95, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 745.0, + "assetBalance": -24570.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2074, + "ages": { + "rep": 96, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 760.0, + "assetBalance": -29015.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2075, + "ages": { + "rep": 97, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 775.0, + "assetBalance": -34143.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2076, + "ages": { + "rep": 98, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 791.0, + "assetBalance": -40055.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2077, + "ages": { + "rep": 99, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 806.0, + "assetBalance": -46870.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2078, + "ages": { + "rep": 100, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 823.0, + "assetBalance": -54723.0 + }, + "events": [], + "isCritical": true + } + ], + "meta": { + "currencyUnit": "万円", + "startYear": 2025 + } + }, + "cashFlow": { + "timeline": [ + { + "year": 2025, + "age": 47, + "income": { + "total": 703 + }, + "expenses": { + "living": 115.2, + "housing": 86.39999999999999, + "education": 43.199999999999996, + "tax": 28.8, + "event": 14.4 + }, + "totalExpense": 288.0, + "netCashFlow": 415.0, + "assetBalance": 1349.0 + }, + { + "year": 2026, + "age": 48, + "income": { + "total": 703 + }, + "expenses": { + "living": 117.60000000000001, + "housing": 88.2, + "education": 44.1, + "tax": 29.400000000000002, + "event": 14.700000000000001 + }, + "totalExpense": 294.0, + "netCashFlow": 409.0, + "assetBalance": 1799.0 + }, + { + "year": 2027, + "age": 49, + "income": { + "total": 703 + }, + "expenses": { + "living": 120.0, + "housing": 90.0, + "education": 45.0, + "tax": 30.0, + "event": 15.0 + }, + "totalExpense": 300.0, + "netCashFlow": 403.0, + "assetBalance": 2256.0 + }, + { + "year": 2028, + "age": 50, + "income": { + "total": 703 + }, + "expenses": { + "living": 122.4, + "housing": 91.8, + "education": 45.9, + "tax": 30.6, + "event": 15.3 + }, + "totalExpense": 306.0, + "netCashFlow": 397.0, + "assetBalance": 2721.0 + }, + { + "year": 2029, + "age": 51, + "income": { + "total": 703 + }, + "expenses": { + "living": 124.80000000000001, + "housing": 93.6, + "education": 46.8, + "tax": 31.200000000000003, + "event": 15.600000000000001 + }, + "totalExpense": 312.0, + "netCashFlow": 391.0, + "assetBalance": 3194.0 + }, + { + "year": 2030, + "age": 52, + "income": { + "total": 703 + }, + "expenses": { + "living": 127.2, + "housing": 95.39999999999999, + "education": 47.699999999999996, + "tax": 31.8, + "event": 15.9 + }, + "totalExpense": 318.0, + "netCashFlow": 385.0, + "assetBalance": 3675.0 + }, + { + "year": 2031, + "age": 53, + "income": { + "total": 703 + }, + "expenses": { + "living": 129.6, + "housing": 97.2, + "education": 48.6, + "tax": 32.4, + "event": 16.2 + }, + "totalExpense": 324.0, + "netCashFlow": 379.0, + "assetBalance": 4164.0 + }, + { + "year": 2032, + "age": 54, + "income": { + "total": 703 + }, + "expenses": { + "living": 132.4, + "housing": 99.3, + "education": 49.65, + "tax": 33.1, + "event": 16.55 + }, + "totalExpense": 331.0, + "netCashFlow": 372.0, + "assetBalance": 4661.0 + }, + { + "year": 2033, + "age": 55, + "income": { + "total": 703 + }, + "expenses": { + "living": 134.8, + "housing": 101.1, + "education": 50.55, + "tax": 33.7, + "event": 16.85 + }, + "totalExpense": 337.0, + "netCashFlow": 366.0, + "assetBalance": 5166.0 + }, + { + "year": 2034, + "age": 56, + "income": { + "total": 703 + }, + "expenses": { + "living": 137.6, + "housing": 103.2, + "education": 51.6, + "tax": 34.4, + "event": 17.2 + }, + "totalExpense": 344.0, + "netCashFlow": 359.0, + "assetBalance": 5680.0 + }, + { + "year": 2035, + "age": 57, + "income": { + "total": 703 + }, + "expenses": { + "living": 140.4, + "housing": 105.3, + "education": 52.65, + "tax": 35.1, + "event": 17.55 + }, + "totalExpense": 351.0, + "netCashFlow": 352.0, + "assetBalance": 6203.0 + }, + { + "year": 2036, + "age": 58, + "income": { + "total": 703 + }, + "expenses": { + "living": 143.20000000000002, + "housing": 107.39999999999999, + "education": 53.699999999999996, + "tax": 35.800000000000004, + "event": 17.900000000000002 + }, + "totalExpense": 358.0, + "netCashFlow": 345.0, + "assetBalance": 6734.0 + }, + { + "year": 2037, + "age": 59, + "income": { + "total": 703 + }, + "expenses": { + "living": 146.0, + "housing": 109.5, + "education": 54.75, + "tax": 36.5, + "event": 18.25 + }, + "totalExpense": 365.0, + "netCashFlow": 338.0, + "assetBalance": 7273.0 + }, + { + "year": 2038, + "age": 60, + "income": { + "total": 0 + }, + "expenses": { + "living": 149.20000000000002, + "housing": 111.89999999999999, + "education": 55.949999999999996, + "tax": 37.300000000000004, + "event": 18.650000000000002 + }, + "totalExpense": 373.0, + "netCashFlow": -373.0, + "assetBalance": 7119.0 + }, + { + "year": 2039, + "age": 61, + "income": { + "total": 0 + }, + "expenses": { + "living": 152.0, + "housing": 114.0, + "education": 57.0, + "tax": 38.0, + "event": 19.0 + }, + "totalExpense": 380.0, + "netCashFlow": -380.0, + "assetBalance": 6953.0 + }, + { + "year": 2040, + "age": 62, + "income": { + "total": 0 + }, + "expenses": { + "living": 155.20000000000002, + "housing": 116.39999999999999, + "education": 58.199999999999996, + "tax": 38.800000000000004, + "event": 19.400000000000002 + }, + "totalExpense": 388.0, + "netCashFlow": -388.0, + "assetBalance": 6774.0 + }, + { + "year": 2041, + "age": 63, + "income": { + "total": 0 + }, + "expenses": { + "living": 158.0, + "housing": 118.5, + "education": 59.25, + "tax": 39.5, + "event": 19.75 + }, + "totalExpense": 395.0, + "netCashFlow": -395.0, + "assetBalance": 6581.0 + }, + { + "year": 2042, + "age": 64, + "income": { + "total": 0 + }, + "expenses": { + "living": 161.20000000000002, + "housing": 120.89999999999999, + "education": 60.449999999999996, + "tax": 40.300000000000004, + "event": 20.150000000000002 + }, + "totalExpense": 403.0, + "netCashFlow": -403.0, + "assetBalance": 6376.0 + }, + { + "year": 2043, + "age": 65, + "income": { + "total": 0 + }, + "expenses": { + "living": 164.4, + "housing": 123.3, + "education": 61.65, + "tax": 41.1, + "event": 20.55 + }, + "totalExpense": 411.0, + "netCashFlow": -411.0, + "assetBalance": 6155.0 + }, + { + "year": 2044, + "age": 66, + "income": { + "total": 0 + }, + "expenses": { + "living": 168.0, + "housing": 126.0, + "education": 63.0, + "tax": 42.0, + "event": 21.0 + }, + "totalExpense": 420.0, + "netCashFlow": -420.0, + "assetBalance": 5921.0 + }, + { + "year": 2045, + "age": 67, + "income": { + "total": 0 + }, + "expenses": { + "living": 171.20000000000002, + "housing": 128.4, + "education": 64.2, + "tax": 42.800000000000004, + "event": 21.400000000000002 + }, + "totalExpense": 428.0, + "netCashFlow": -428.0, + "assetBalance": 5670.0 + }, + { + "year": 2046, + "age": 68, + "income": { + "total": 0 + }, + "expenses": { + "living": 174.8, + "housing": 131.1, + "education": 65.55, + "tax": 43.7, + "event": 21.85 + }, + "totalExpense": 437.0, + "netCashFlow": -437.0, + "assetBalance": 5404.0 + }, + { + "year": 2047, + "age": 69, + "income": { + "total": 0 + }, + "expenses": { + "living": 178.0, + "housing": 133.5, + "education": 66.75, + "tax": 44.5, + "event": 22.25 + }, + "totalExpense": 445.0, + "netCashFlow": -445.0, + "assetBalance": 5121.0 + }, + { + "year": 2048, + "age": 70, + "income": { + "total": 0 + }, + "expenses": { + "living": 181.60000000000002, + "housing": 136.2, + "education": 68.1, + "tax": 45.400000000000006, + "event": 22.700000000000003 + }, + "totalExpense": 454.0, + "netCashFlow": -454.0, + "assetBalance": 4820.0 + }, + { + "year": 2049, + "age": 71, + "income": { + "total": 0 + }, + "expenses": { + "living": 185.20000000000002, + "housing": 138.9, + "education": 69.45, + "tax": 46.300000000000004, + "event": 23.150000000000002 + }, + "totalExpense": 463.0, + "netCashFlow": -463.0, + "assetBalance": 4502.0 + }, + { + "year": 2050, + "age": 72, + "income": { + "total": 0 + }, + "expenses": { + "living": 188.8, + "housing": 141.6, + "education": 70.8, + "tax": 47.2, + "event": 23.6 + }, + "totalExpense": 472.0, + "netCashFlow": -472.0, + "assetBalance": 4164.0 + }, + { + "year": 2051, + "age": 73, + "income": { + "total": 0 + }, + "expenses": { + "living": 192.8, + "housing": 144.6, + "education": 72.3, + "tax": 48.2, + "event": 24.1 + }, + "totalExpense": 482.0, + "netCashFlow": -482.0, + "assetBalance": 3807.0 + }, + { + "year": 2052, + "age": 74, + "income": { + "total": 0 + }, + "expenses": { + "living": 196.8, + "housing": 147.6, + "education": 73.8, + "tax": 49.2, + "event": 24.6 + }, + "totalExpense": 492.0, + "netCashFlow": -492.0, + "assetBalance": 3430.0 + }, + { + "year": 2053, + "age": 75, + "income": { + "total": 0 + }, + "expenses": { + "living": 200.4, + "housing": 150.29999999999998, + "education": 75.14999999999999, + "tax": 50.1, + "event": 25.05 + }, + "totalExpense": 501.0, + "netCashFlow": -501.0, + "assetBalance": 3031.0 + }, + { + "year": 2054, + "age": 76, + "income": { + "total": 0 + }, + "expenses": { + "living": 204.4, + "housing": 153.29999999999998, + "education": 76.64999999999999, + "tax": 51.1, + "event": 25.55 + }, + "totalExpense": 511.0, + "netCashFlow": -511.0, + "assetBalance": 2611.0 + }, + { + "year": 2055, + "age": 77, + "income": { + "total": 0 + }, + "expenses": { + "living": 208.8, + "housing": 156.6, + "education": 78.3, + "tax": 52.2, + "event": 26.1 + }, + "totalExpense": 522.0, + "netCashFlow": -522.0, + "assetBalance": 2167.0 + }, + { + "year": 2056, + "age": 78, + "income": { + "total": 0 + }, + "expenses": { + "living": 212.8, + "housing": 159.6, + "education": 79.8, + "tax": 53.2, + "event": 26.6 + }, + "totalExpense": 532.0, + "netCashFlow": -532.0, + "assetBalance": 1700.0 + }, + { + "year": 2057, + "age": 79, + "income": { + "total": 0 + }, + "expenses": { + "living": 217.20000000000002, + "housing": 162.9, + "education": 81.45, + "tax": 54.300000000000004, + "event": 27.150000000000002 + }, + "totalExpense": 543.0, + "netCashFlow": -543.0, + "assetBalance": 1209.0 + }, + { + "year": 2058, + "age": 80, + "income": { + "total": 0 + }, + "expenses": { + "living": 221.60000000000002, + "housing": 166.2, + "education": 83.1, + "tax": 55.400000000000006, + "event": 27.700000000000003 + }, + "totalExpense": 554.0, + "netCashFlow": -554.0, + "assetBalance": 691.0 + }, + { + "year": 2059, + "age": 81, + "income": { + "total": 0 + }, + "expenses": { + "living": 226.0, + "housing": 169.5, + "education": 84.75, + "tax": 56.5, + "event": 28.25 + }, + "totalExpense": 565.0, + "netCashFlow": -565.0, + "assetBalance": 147.0 + }, + { + "year": 2060, + "age": 82, + "income": { + "total": 0 + }, + "expenses": { + "living": 230.4, + "housing": 172.79999999999998, + "education": 86.39999999999999, + "tax": 57.6, + "event": 28.8 + }, + "totalExpense": 576.0, + "netCashFlow": -576.0, + "assetBalance": -424.0 + }, + { + "year": 2061, + "age": 83, + "income": { + "total": 0 + }, + "expenses": { + "living": 234.8, + "housing": 176.1, + "education": 88.05, + "tax": 58.7, + "event": 29.35 + }, + "totalExpense": 587.0, + "netCashFlow": -587.0, + "assetBalance": -1075.0 + }, + { + "year": 2062, + "age": 84, + "income": { + "total": 0 + }, + "expenses": { + "living": 239.60000000000002, + "housing": 179.7, + "education": 89.85, + "tax": 59.900000000000006, + "event": 29.950000000000003 + }, + "totalExpense": 599.0, + "netCashFlow": -599.0, + "assetBalance": -1836.0 + }, + { + "year": 2063, + "age": 85, + "income": { + "total": 0 + }, + "expenses": { + "living": 244.4, + "housing": 183.29999999999998, + "education": 91.64999999999999, + "tax": 61.1, + "event": 30.55 + }, + "totalExpense": 611.0, + "netCashFlow": -611.0, + "assetBalance": -2723.0 + }, + { + "year": 2064, + "age": 86, + "income": { + "total": 0 + }, + "expenses": { + "living": 249.20000000000002, + "housing": 186.9, + "education": 93.45, + "tax": 62.300000000000004, + "event": 31.150000000000002 + }, + "totalExpense": 623.0, + "netCashFlow": -623.0, + "assetBalance": -3754.0 + }, + { + "year": 2065, + "age": 87, + "income": { + "total": 0 + }, + "expenses": { + "living": 254.4, + "housing": 190.79999999999998, + "education": 95.39999999999999, + "tax": 63.6, + "event": 31.8 + }, + "totalExpense": 636.0, + "netCashFlow": -636.0, + "assetBalance": -4954.0 + }, + { + "year": 2066, + "age": 88, + "income": { + "total": 0 + }, + "expenses": { + "living": 259.6, + "housing": 194.7, + "education": 97.35, + "tax": 64.9, + "event": 32.45 + }, + "totalExpense": 649.0, + "netCashFlow": -649.0, + "assetBalance": -6345.0 + }, + { + "year": 2067, + "age": 89, + "income": { + "total": 0 + }, + "expenses": { + "living": 264.8, + "housing": 198.6, + "education": 99.3, + "tax": 66.2, + "event": 33.1 + }, + "totalExpense": 662.0, + "netCashFlow": -662.0, + "assetBalance": -7959.0 + }, + { + "year": 2068, + "age": 90, + "income": { + "total": 0 + }, + "expenses": { + "living": 270.0, + "housing": 202.5, + "education": 101.25, + "tax": 67.5, + "event": 33.75 + }, + "totalExpense": 675.0, + "netCashFlow": -675.0, + "assetBalance": -9827.0 + }, + { + "year": 2069, + "age": 91, + "income": { + "total": 0 + }, + "expenses": { + "living": 275.2, + "housing": 206.4, + "education": 103.2, + "tax": 68.8, + "event": 34.4 + }, + "totalExpense": 688.0, + "netCashFlow": -688.0, + "assetBalance": -11990.0 + }, + { + "year": 2070, + "age": 92, + "income": { + "total": 0 + }, + "expenses": { + "living": 280.8, + "housing": 210.6, + "education": 105.3, + "tax": 70.2, + "event": 35.1 + }, + "totalExpense": 702.0, + "netCashFlow": -702.0, + "assetBalance": -14490.0 + }, + { + "year": 2071, + "age": 93, + "income": { + "total": 0 + }, + "expenses": { + "living": 286.40000000000003, + "housing": 214.79999999999998, + "education": 107.39999999999999, + "tax": 71.60000000000001, + "event": 35.800000000000004 + }, + "totalExpense": 716.0, + "netCashFlow": -716.0, + "assetBalance": -17380.0 + }, + { + "year": 2072, + "age": 94, + "income": { + "total": 0 + }, + "expenses": { + "living": 292.0, + "housing": 219.0, + "education": 109.5, + "tax": 73.0, + "event": 36.5 + }, + "totalExpense": 730.0, + "netCashFlow": -730.0, + "assetBalance": -20717.0 + }, + { + "year": 2073, + "age": 95, + "income": { + "total": 0 + }, + "expenses": { + "living": 298.0, + "housing": 223.5, + "education": 111.75, + "tax": 74.5, + "event": 37.25 + }, + "totalExpense": 745.0, + "netCashFlow": -745.0, + "assetBalance": -24570.0 + }, + { + "year": 2074, + "age": 96, + "income": { + "total": 0 + }, + "expenses": { + "living": 304.0, + "housing": 228.0, + "education": 114.0, + "tax": 76.0, + "event": 38.0 + }, + "totalExpense": 760.0, + "netCashFlow": -760.0, + "assetBalance": -29015.0 + }, + { + "year": 2075, + "age": 97, + "income": { + "total": 0 + }, + "expenses": { + "living": 310.0, + "housing": 232.5, + "education": 116.25, + "tax": 77.5, + "event": 38.75 + }, + "totalExpense": 775.0, + "netCashFlow": -775.0, + "assetBalance": -34143.0 + }, + { + "year": 2076, + "age": 98, + "income": { + "total": 0 + }, + "expenses": { + "living": 316.40000000000003, + "housing": 237.29999999999998, + "education": 118.64999999999999, + "tax": 79.10000000000001, + "event": 39.550000000000004 + }, + "totalExpense": 791.0, + "netCashFlow": -791.0, + "assetBalance": -40055.0 + }, + { + "year": 2077, + "age": 99, + "income": { + "total": 0 + }, + "expenses": { + "living": 322.40000000000003, + "housing": 241.79999999999998, + "education": 120.89999999999999, + "tax": 80.60000000000001, + "event": 40.300000000000004 + }, + "totalExpense": 806.0, + "netCashFlow": -806.0, + "assetBalance": -46870.0 + }, + { + "year": 2078, + "age": 100, + "income": { + "total": 0 + }, + "expenses": { + "living": 329.20000000000005, + "housing": 246.89999999999998, + "education": 123.44999999999999, + "tax": 82.30000000000001, + "event": 41.150000000000006 + }, + "totalExpense": 823.0, + "netCashFlow": -823.0, + "assetBalance": -54723.0 + } + ], + "meta": { + "currencyUnit": "万円" + } + } + }, + "script": [ + { + "id": "slide2_intro", + "text": "それでは、テスト太郎様のご家族についてご紹介いたします。こちらのスライドをご覧ください。", + "duration": 8.976, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full", + "audioPath": "public/family_intro_audio/narration_intro01.mp3" + }, + { + "id": "slide2_family_overview", + "text": "今回ご紹介するのは、テスト太郎さん、花子さん、そして7歳になる息子さんの3人家族です。太郎さんは情報通信業にお勤めで、年収は703万円。花子さんは卸売・小売業で、年収は368万円です。素敵なご家族ですね。", + "duration": 19.248, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full", + "audioPath": "public/family_intro_audio/narration_family01.mp3" + }, + { + "id": "slide2_child_info", + "text": "それでは、ご家族の詳細を見ていきましょう。まず、お父様のテスト太郎さんは、1980年1月1日生まれの47歳。情報通信業でご活躍されています。", + "duration": 30.264, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full", + "audioPath": "public/family_intro_audio/narration_details01.mp3" + }, + { + "id": "slide3_transition", + "text": "テストさんご一家の世帯年収は1071万円。将来の夢に向かって、素晴らしいライフプランを描いていきましょう。", + "duration": 9.528, + "visualType": "ppt", + "visualAssetIndex": 2, + "highlightArea": "full", + "audioPath": "public/family_intro_audio/narration_summary01.mp3" + } + ], + "assets": { + "slides": [ + { + "index": 0, + "title": "ライフプラン", + "image_path": "public/slide_001.png" + }, + { + "index": 1, + "title": "2", + "image_path": "public/slide_002.png" + }, + { + "index": 2, + "title": "3", + "image_path": "public/slide_003.png" + }, + { + "index": 3, + "title": "4", + "image_path": "public/slide_004.png" + }, + { + "index": 4, + "title": "5", + "image_path": "public/slide_005.png" + }, + { + "index": 5, + "title": "6", + "image_path": "public/slide_006.png" + }, + { + "index": 6, + "title": "7", + "image_path": "public/slide_007.png" + } + ], + "videoClips": [], + "broll": { + "Japanese family sitting together": "Family Gathering_5856567.mp4", + "Japanese couple calculating budget": "Budgeting Couple_7958685.mp4", + "Japanese man explaining feelings": "Expressing Feelings_7957918.mp4", + "Asian man nodding in agreement": "Nodding In Agreement_4586579.mp4", + "Japanese retired couple smiling": "Smiling Retirees_6761158.mp4", + "Japanese family visiting a new car": "Car Shopping_31980658.mp4", + "Japanese consultant pointing at document": "Consultant Pointing_7844849.mp4", + "Japanese advisor asking about family": "Advisor Inquiring_7844849.mp4", + "Asian man giving his birthday": "Giving Birthday_5529618.mp4", + "Japanese businessman greeting warmly": "Warm Greeting_3304352.mp4", + "Japanese student studying hard": "Studying Hard_7958453.mp4", + "Japanese calendar with events marked": "Marked Calendar_9057559.mp4", + "Japanese financial planner verifying age": "Verifying Age_6539952.mp4", + "Japanese advisor bowing politely": "Polite Bowing_7958678.mp4", + "Japanese man introduced himself": "Self-Introduction_7958453.mp4", + "Japanese financial consultant showing graphs": "Showing Graphs_7844858.mp4", + "Japanese financial advisor consulting client": "Client Consulting_4486777.mp4", + "Japanese man talking in interview": "Interview Talking_4428754.mp4" + } + } +} \ No newline at end of file diff --git a/assets/1_processed/render_props_slide_1_detailed.json b/assets/1_processed/render_props_slide_1_detailed.json new file mode 100644 index 0000000..6976430 --- /dev/null +++ b/assets/1_processed/render_props_slide_1_detailed.json @@ -0,0 +1,1875 @@ +{ + "meta": { + "title": "【詳細解説】2 - 家族代表様", + "currencyUnit": "万円", + "duration": 81.912, + "clientName": "家族代表" + }, + "charts": { + "assetDepletion": { + "timeline": [ + { + "year": 2025, + "ages": { + "rep": 47, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 288.0, + "assetBalance": 1349.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2026, + "ages": { + "rep": 48, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 294.0, + "assetBalance": 1799.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2027, + "ages": { + "rep": 49, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 300.0, + "assetBalance": 2256.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2028, + "ages": { + "rep": 50, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 306.0, + "assetBalance": 2721.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2029, + "ages": { + "rep": 51, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 312.0, + "assetBalance": 3194.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2030, + "ages": { + "rep": 52, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 318.0, + "assetBalance": 3675.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2031, + "ages": { + "rep": 53, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 324.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2032, + "ages": { + "rep": 54, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 331.0, + "assetBalance": 4661.0 + }, + "events": [ + "Event", + "Event" + ], + "isCritical": false + }, + { + "year": 2033, + "ages": { + "rep": 55, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 337.0, + "assetBalance": 5166.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2034, + "ages": { + "rep": 56, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 344.0, + "assetBalance": 5680.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2035, + "ages": { + "rep": 57, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 351.0, + "assetBalance": 6203.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2036, + "ages": { + "rep": 58, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 358.0, + "assetBalance": 6734.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2037, + "ages": { + "rep": 59, + "spouse": null + }, + "financials": { + "income": 703, + "expenditure": 365.0, + "assetBalance": 7273.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2038, + "ages": { + "rep": 60, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 373.0, + "assetBalance": 7119.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2039, + "ages": { + "rep": 61, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 380.0, + "assetBalance": 6953.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2040, + "ages": { + "rep": 62, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 388.0, + "assetBalance": 6774.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2041, + "ages": { + "rep": 63, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 395.0, + "assetBalance": 6581.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2042, + "ages": { + "rep": 64, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 403.0, + "assetBalance": 6376.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2043, + "ages": { + "rep": 65, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 411.0, + "assetBalance": 6155.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2044, + "ages": { + "rep": 66, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 420.0, + "assetBalance": 5921.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2045, + "ages": { + "rep": 67, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 428.0, + "assetBalance": 5670.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2046, + "ages": { + "rep": 68, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 437.0, + "assetBalance": 5404.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2047, + "ages": { + "rep": 69, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 445.0, + "assetBalance": 5121.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2048, + "ages": { + "rep": 70, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 454.0, + "assetBalance": 4820.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2049, + "ages": { + "rep": 71, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 463.0, + "assetBalance": 4502.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2050, + "ages": { + "rep": 72, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 472.0, + "assetBalance": 4164.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2051, + "ages": { + "rep": 73, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 482.0, + "assetBalance": 3807.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2052, + "ages": { + "rep": 74, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 492.0, + "assetBalance": 3430.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2053, + "ages": { + "rep": 75, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 501.0, + "assetBalance": 3031.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2054, + "ages": { + "rep": 76, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 511.0, + "assetBalance": 2611.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2055, + "ages": { + "rep": 77, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 522.0, + "assetBalance": 2167.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2056, + "ages": { + "rep": 78, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 532.0, + "assetBalance": 1700.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2057, + "ages": { + "rep": 79, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 543.0, + "assetBalance": 1209.0 + }, + "events": [ + "Event" + ], + "isCritical": false + }, + { + "year": 2058, + "ages": { + "rep": 80, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 554.0, + "assetBalance": 691.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2059, + "ages": { + "rep": 81, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 565.0, + "assetBalance": 147.0 + }, + "events": [], + "isCritical": false + }, + { + "year": 2060, + "ages": { + "rep": 82, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 576.0, + "assetBalance": -424.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2061, + "ages": { + "rep": 83, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 587.0, + "assetBalance": -1075.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2062, + "ages": { + "rep": 84, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 599.0, + "assetBalance": -1836.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2063, + "ages": { + "rep": 85, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 611.0, + "assetBalance": -2723.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2064, + "ages": { + "rep": 86, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 623.0, + "assetBalance": -3754.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2065, + "ages": { + "rep": 87, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 636.0, + "assetBalance": -4954.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2066, + "ages": { + "rep": 88, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 649.0, + "assetBalance": -6345.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2067, + "ages": { + "rep": 89, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 662.0, + "assetBalance": -7959.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2068, + "ages": { + "rep": 90, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 675.0, + "assetBalance": -9827.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2069, + "ages": { + "rep": 91, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 688.0, + "assetBalance": -11990.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2070, + "ages": { + "rep": 92, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 702.0, + "assetBalance": -14490.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2071, + "ages": { + "rep": 93, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 716.0, + "assetBalance": -17380.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2072, + "ages": { + "rep": 94, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 730.0, + "assetBalance": -20717.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2073, + "ages": { + "rep": 95, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 745.0, + "assetBalance": -24570.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2074, + "ages": { + "rep": 96, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 760.0, + "assetBalance": -29015.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2075, + "ages": { + "rep": 97, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 775.0, + "assetBalance": -34143.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2076, + "ages": { + "rep": 98, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 791.0, + "assetBalance": -40055.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2077, + "ages": { + "rep": 99, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 806.0, + "assetBalance": -46870.0 + }, + "events": [], + "isCritical": true + }, + { + "year": 2078, + "ages": { + "rep": 100, + "spouse": null + }, + "financials": { + "income": 0, + "expenditure": 823.0, + "assetBalance": -54723.0 + }, + "events": [], + "isCritical": true + } + ], + "meta": { + "currencyUnit": "万円", + "startYear": 2025 + } + }, + "cashFlow": { + "timeline": [ + { + "year": 2025, + "age": 47, + "income": { + "total": 703 + }, + "expenses": { + "living": 115.2, + "housing": 86.39999999999999, + "education": 43.199999999999996, + "tax": 28.8, + "event": 14.4 + }, + "totalExpense": 288.0, + "netCashFlow": 415.0, + "assetBalance": 1349.0 + }, + { + "year": 2026, + "age": 48, + "income": { + "total": 703 + }, + "expenses": { + "living": 117.60000000000001, + "housing": 88.2, + "education": 44.1, + "tax": 29.400000000000002, + "event": 14.700000000000001 + }, + "totalExpense": 294.0, + "netCashFlow": 409.0, + "assetBalance": 1799.0 + }, + { + "year": 2027, + "age": 49, + "income": { + "total": 703 + }, + "expenses": { + "living": 120.0, + "housing": 90.0, + "education": 45.0, + "tax": 30.0, + "event": 15.0 + }, + "totalExpense": 300.0, + "netCashFlow": 403.0, + "assetBalance": 2256.0 + }, + { + "year": 2028, + "age": 50, + "income": { + "total": 703 + }, + "expenses": { + "living": 122.4, + "housing": 91.8, + "education": 45.9, + "tax": 30.6, + "event": 15.3 + }, + "totalExpense": 306.0, + "netCashFlow": 397.0, + "assetBalance": 2721.0 + }, + { + "year": 2029, + "age": 51, + "income": { + "total": 703 + }, + "expenses": { + "living": 124.80000000000001, + "housing": 93.6, + "education": 46.8, + "tax": 31.200000000000003, + "event": 15.600000000000001 + }, + "totalExpense": 312.0, + "netCashFlow": 391.0, + "assetBalance": 3194.0 + }, + { + "year": 2030, + "age": 52, + "income": { + "total": 703 + }, + "expenses": { + "living": 127.2, + "housing": 95.39999999999999, + "education": 47.699999999999996, + "tax": 31.8, + "event": 15.9 + }, + "totalExpense": 318.0, + "netCashFlow": 385.0, + "assetBalance": 3675.0 + }, + { + "year": 2031, + "age": 53, + "income": { + "total": 703 + }, + "expenses": { + "living": 129.6, + "housing": 97.2, + "education": 48.6, + "tax": 32.4, + "event": 16.2 + }, + "totalExpense": 324.0, + "netCashFlow": 379.0, + "assetBalance": 4164.0 + }, + { + "year": 2032, + "age": 54, + "income": { + "total": 703 + }, + "expenses": { + "living": 132.4, + "housing": 99.3, + "education": 49.65, + "tax": 33.1, + "event": 16.55 + }, + "totalExpense": 331.0, + "netCashFlow": 372.0, + "assetBalance": 4661.0 + }, + { + "year": 2033, + "age": 55, + "income": { + "total": 703 + }, + "expenses": { + "living": 134.8, + "housing": 101.1, + "education": 50.55, + "tax": 33.7, + "event": 16.85 + }, + "totalExpense": 337.0, + "netCashFlow": 366.0, + "assetBalance": 5166.0 + }, + { + "year": 2034, + "age": 56, + "income": { + "total": 703 + }, + "expenses": { + "living": 137.6, + "housing": 103.2, + "education": 51.6, + "tax": 34.4, + "event": 17.2 + }, + "totalExpense": 344.0, + "netCashFlow": 359.0, + "assetBalance": 5680.0 + }, + { + "year": 2035, + "age": 57, + "income": { + "total": 703 + }, + "expenses": { + "living": 140.4, + "housing": 105.3, + "education": 52.65, + "tax": 35.1, + "event": 17.55 + }, + "totalExpense": 351.0, + "netCashFlow": 352.0, + "assetBalance": 6203.0 + }, + { + "year": 2036, + "age": 58, + "income": { + "total": 703 + }, + "expenses": { + "living": 143.20000000000002, + "housing": 107.39999999999999, + "education": 53.699999999999996, + "tax": 35.800000000000004, + "event": 17.900000000000002 + }, + "totalExpense": 358.0, + "netCashFlow": 345.0, + "assetBalance": 6734.0 + }, + { + "year": 2037, + "age": 59, + "income": { + "total": 703 + }, + "expenses": { + "living": 146.0, + "housing": 109.5, + "education": 54.75, + "tax": 36.5, + "event": 18.25 + }, + "totalExpense": 365.0, + "netCashFlow": 338.0, + "assetBalance": 7273.0 + }, + { + "year": 2038, + "age": 60, + "income": { + "total": 0 + }, + "expenses": { + "living": 149.20000000000002, + "housing": 111.89999999999999, + "education": 55.949999999999996, + "tax": 37.300000000000004, + "event": 18.650000000000002 + }, + "totalExpense": 373.0, + "netCashFlow": -373.0, + "assetBalance": 7119.0 + }, + { + "year": 2039, + "age": 61, + "income": { + "total": 0 + }, + "expenses": { + "living": 152.0, + "housing": 114.0, + "education": 57.0, + "tax": 38.0, + "event": 19.0 + }, + "totalExpense": 380.0, + "netCashFlow": -380.0, + "assetBalance": 6953.0 + }, + { + "year": 2040, + "age": 62, + "income": { + "total": 0 + }, + "expenses": { + "living": 155.20000000000002, + "housing": 116.39999999999999, + "education": 58.199999999999996, + "tax": 38.800000000000004, + "event": 19.400000000000002 + }, + "totalExpense": 388.0, + "netCashFlow": -388.0, + "assetBalance": 6774.0 + }, + { + "year": 2041, + "age": 63, + "income": { + "total": 0 + }, + "expenses": { + "living": 158.0, + "housing": 118.5, + "education": 59.25, + "tax": 39.5, + "event": 19.75 + }, + "totalExpense": 395.0, + "netCashFlow": -395.0, + "assetBalance": 6581.0 + }, + { + "year": 2042, + "age": 64, + "income": { + "total": 0 + }, + "expenses": { + "living": 161.20000000000002, + "housing": 120.89999999999999, + "education": 60.449999999999996, + "tax": 40.300000000000004, + "event": 20.150000000000002 + }, + "totalExpense": 403.0, + "netCashFlow": -403.0, + "assetBalance": 6376.0 + }, + { + "year": 2043, + "age": 65, + "income": { + "total": 0 + }, + "expenses": { + "living": 164.4, + "housing": 123.3, + "education": 61.65, + "tax": 41.1, + "event": 20.55 + }, + "totalExpense": 411.0, + "netCashFlow": -411.0, + "assetBalance": 6155.0 + }, + { + "year": 2044, + "age": 66, + "income": { + "total": 0 + }, + "expenses": { + "living": 168.0, + "housing": 126.0, + "education": 63.0, + "tax": 42.0, + "event": 21.0 + }, + "totalExpense": 420.0, + "netCashFlow": -420.0, + "assetBalance": 5921.0 + }, + { + "year": 2045, + "age": 67, + "income": { + "total": 0 + }, + "expenses": { + "living": 171.20000000000002, + "housing": 128.4, + "education": 64.2, + "tax": 42.800000000000004, + "event": 21.400000000000002 + }, + "totalExpense": 428.0, + "netCashFlow": -428.0, + "assetBalance": 5670.0 + }, + { + "year": 2046, + "age": 68, + "income": { + "total": 0 + }, + "expenses": { + "living": 174.8, + "housing": 131.1, + "education": 65.55, + "tax": 43.7, + "event": 21.85 + }, + "totalExpense": 437.0, + "netCashFlow": -437.0, + "assetBalance": 5404.0 + }, + { + "year": 2047, + "age": 69, + "income": { + "total": 0 + }, + "expenses": { + "living": 178.0, + "housing": 133.5, + "education": 66.75, + "tax": 44.5, + "event": 22.25 + }, + "totalExpense": 445.0, + "netCashFlow": -445.0, + "assetBalance": 5121.0 + }, + { + "year": 2048, + "age": 70, + "income": { + "total": 0 + }, + "expenses": { + "living": 181.60000000000002, + "housing": 136.2, + "education": 68.1, + "tax": 45.400000000000006, + "event": 22.700000000000003 + }, + "totalExpense": 454.0, + "netCashFlow": -454.0, + "assetBalance": 4820.0 + }, + { + "year": 2049, + "age": 71, + "income": { + "total": 0 + }, + "expenses": { + "living": 185.20000000000002, + "housing": 138.9, + "education": 69.45, + "tax": 46.300000000000004, + "event": 23.150000000000002 + }, + "totalExpense": 463.0, + "netCashFlow": -463.0, + "assetBalance": 4502.0 + }, + { + "year": 2050, + "age": 72, + "income": { + "total": 0 + }, + "expenses": { + "living": 188.8, + "housing": 141.6, + "education": 70.8, + "tax": 47.2, + "event": 23.6 + }, + "totalExpense": 472.0, + "netCashFlow": -472.0, + "assetBalance": 4164.0 + }, + { + "year": 2051, + "age": 73, + "income": { + "total": 0 + }, + "expenses": { + "living": 192.8, + "housing": 144.6, + "education": 72.3, + "tax": 48.2, + "event": 24.1 + }, + "totalExpense": 482.0, + "netCashFlow": -482.0, + "assetBalance": 3807.0 + }, + { + "year": 2052, + "age": 74, + "income": { + "total": 0 + }, + "expenses": { + "living": 196.8, + "housing": 147.6, + "education": 73.8, + "tax": 49.2, + "event": 24.6 + }, + "totalExpense": 492.0, + "netCashFlow": -492.0, + "assetBalance": 3430.0 + }, + { + "year": 2053, + "age": 75, + "income": { + "total": 0 + }, + "expenses": { + "living": 200.4, + "housing": 150.29999999999998, + "education": 75.14999999999999, + "tax": 50.1, + "event": 25.05 + }, + "totalExpense": 501.0, + "netCashFlow": -501.0, + "assetBalance": 3031.0 + }, + { + "year": 2054, + "age": 76, + "income": { + "total": 0 + }, + "expenses": { + "living": 204.4, + "housing": 153.29999999999998, + "education": 76.64999999999999, + "tax": 51.1, + "event": 25.55 + }, + "totalExpense": 511.0, + "netCashFlow": -511.0, + "assetBalance": 2611.0 + }, + { + "year": 2055, + "age": 77, + "income": { + "total": 0 + }, + "expenses": { + "living": 208.8, + "housing": 156.6, + "education": 78.3, + "tax": 52.2, + "event": 26.1 + }, + "totalExpense": 522.0, + "netCashFlow": -522.0, + "assetBalance": 2167.0 + }, + { + "year": 2056, + "age": 78, + "income": { + "total": 0 + }, + "expenses": { + "living": 212.8, + "housing": 159.6, + "education": 79.8, + "tax": 53.2, + "event": 26.6 + }, + "totalExpense": 532.0, + "netCashFlow": -532.0, + "assetBalance": 1700.0 + }, + { + "year": 2057, + "age": 79, + "income": { + "total": 0 + }, + "expenses": { + "living": 217.20000000000002, + "housing": 162.9, + "education": 81.45, + "tax": 54.300000000000004, + "event": 27.150000000000002 + }, + "totalExpense": 543.0, + "netCashFlow": -543.0, + "assetBalance": 1209.0 + }, + { + "year": 2058, + "age": 80, + "income": { + "total": 0 + }, + "expenses": { + "living": 221.60000000000002, + "housing": 166.2, + "education": 83.1, + "tax": 55.400000000000006, + "event": 27.700000000000003 + }, + "totalExpense": 554.0, + "netCashFlow": -554.0, + "assetBalance": 691.0 + }, + { + "year": 2059, + "age": 81, + "income": { + "total": 0 + }, + "expenses": { + "living": 226.0, + "housing": 169.5, + "education": 84.75, + "tax": 56.5, + "event": 28.25 + }, + "totalExpense": 565.0, + "netCashFlow": -565.0, + "assetBalance": 147.0 + }, + { + "year": 2060, + "age": 82, + "income": { + "total": 0 + }, + "expenses": { + "living": 230.4, + "housing": 172.79999999999998, + "education": 86.39999999999999, + "tax": 57.6, + "event": 28.8 + }, + "totalExpense": 576.0, + "netCashFlow": -576.0, + "assetBalance": -424.0 + }, + { + "year": 2061, + "age": 83, + "income": { + "total": 0 + }, + "expenses": { + "living": 234.8, + "housing": 176.1, + "education": 88.05, + "tax": 58.7, + "event": 29.35 + }, + "totalExpense": 587.0, + "netCashFlow": -587.0, + "assetBalance": -1075.0 + }, + { + "year": 2062, + "age": 84, + "income": { + "total": 0 + }, + "expenses": { + "living": 239.60000000000002, + "housing": 179.7, + "education": 89.85, + "tax": 59.900000000000006, + "event": 29.950000000000003 + }, + "totalExpense": 599.0, + "netCashFlow": -599.0, + "assetBalance": -1836.0 + }, + { + "year": 2063, + "age": 85, + "income": { + "total": 0 + }, + "expenses": { + "living": 244.4, + "housing": 183.29999999999998, + "education": 91.64999999999999, + "tax": 61.1, + "event": 30.55 + }, + "totalExpense": 611.0, + "netCashFlow": -611.0, + "assetBalance": -2723.0 + }, + { + "year": 2064, + "age": 86, + "income": { + "total": 0 + }, + "expenses": { + "living": 249.20000000000002, + "housing": 186.9, + "education": 93.45, + "tax": 62.300000000000004, + "event": 31.150000000000002 + }, + "totalExpense": 623.0, + "netCashFlow": -623.0, + "assetBalance": -3754.0 + }, + { + "year": 2065, + "age": 87, + "income": { + "total": 0 + }, + "expenses": { + "living": 254.4, + "housing": 190.79999999999998, + "education": 95.39999999999999, + "tax": 63.6, + "event": 31.8 + }, + "totalExpense": 636.0, + "netCashFlow": -636.0, + "assetBalance": -4954.0 + }, + { + "year": 2066, + "age": 88, + "income": { + "total": 0 + }, + "expenses": { + "living": 259.6, + "housing": 194.7, + "education": 97.35, + "tax": 64.9, + "event": 32.45 + }, + "totalExpense": 649.0, + "netCashFlow": -649.0, + "assetBalance": -6345.0 + }, + { + "year": 2067, + "age": 89, + "income": { + "total": 0 + }, + "expenses": { + "living": 264.8, + "housing": 198.6, + "education": 99.3, + "tax": 66.2, + "event": 33.1 + }, + "totalExpense": 662.0, + "netCashFlow": -662.0, + "assetBalance": -7959.0 + }, + { + "year": 2068, + "age": 90, + "income": { + "total": 0 + }, + "expenses": { + "living": 270.0, + "housing": 202.5, + "education": 101.25, + "tax": 67.5, + "event": 33.75 + }, + "totalExpense": 675.0, + "netCashFlow": -675.0, + "assetBalance": -9827.0 + }, + { + "year": 2069, + "age": 91, + "income": { + "total": 0 + }, + "expenses": { + "living": 275.2, + "housing": 206.4, + "education": 103.2, + "tax": 68.8, + "event": 34.4 + }, + "totalExpense": 688.0, + "netCashFlow": -688.0, + "assetBalance": -11990.0 + }, + { + "year": 2070, + "age": 92, + "income": { + "total": 0 + }, + "expenses": { + "living": 280.8, + "housing": 210.6, + "education": 105.3, + "tax": 70.2, + "event": 35.1 + }, + "totalExpense": 702.0, + "netCashFlow": -702.0, + "assetBalance": -14490.0 + }, + { + "year": 2071, + "age": 93, + "income": { + "total": 0 + }, + "expenses": { + "living": 286.40000000000003, + "housing": 214.79999999999998, + "education": 107.39999999999999, + "tax": 71.60000000000001, + "event": 35.800000000000004 + }, + "totalExpense": 716.0, + "netCashFlow": -716.0, + "assetBalance": -17380.0 + }, + { + "year": 2072, + "age": 94, + "income": { + "total": 0 + }, + "expenses": { + "living": 292.0, + "housing": 219.0, + "education": 109.5, + "tax": 73.0, + "event": 36.5 + }, + "totalExpense": 730.0, + "netCashFlow": -730.0, + "assetBalance": -20717.0 + }, + { + "year": 2073, + "age": 95, + "income": { + "total": 0 + }, + "expenses": { + "living": 298.0, + "housing": 223.5, + "education": 111.75, + "tax": 74.5, + "event": 37.25 + }, + "totalExpense": 745.0, + "netCashFlow": -745.0, + "assetBalance": -24570.0 + }, + { + "year": 2074, + "age": 96, + "income": { + "total": 0 + }, + "expenses": { + "living": 304.0, + "housing": 228.0, + "education": 114.0, + "tax": 76.0, + "event": 38.0 + }, + "totalExpense": 760.0, + "netCashFlow": -760.0, + "assetBalance": -29015.0 + }, + { + "year": 2075, + "age": 97, + "income": { + "total": 0 + }, + "expenses": { + "living": 310.0, + "housing": 232.5, + "education": 116.25, + "tax": 77.5, + "event": 38.75 + }, + "totalExpense": 775.0, + "netCashFlow": -775.0, + "assetBalance": -34143.0 + }, + { + "year": 2076, + "age": 98, + "income": { + "total": 0 + }, + "expenses": { + "living": 316.40000000000003, + "housing": 237.29999999999998, + "education": 118.64999999999999, + "tax": 79.10000000000001, + "event": 39.550000000000004 + }, + "totalExpense": 791.0, + "netCashFlow": -791.0, + "assetBalance": -40055.0 + }, + { + "year": 2077, + "age": 99, + "income": { + "total": 0 + }, + "expenses": { + "living": 322.40000000000003, + "housing": 241.79999999999998, + "education": 120.89999999999999, + "tax": 80.60000000000001, + "event": 40.300000000000004 + }, + "totalExpense": 806.0, + "netCashFlow": -806.0, + "assetBalance": -46870.0 + }, + { + "year": 2078, + "age": 100, + "income": { + "total": 0 + }, + "expenses": { + "living": 329.20000000000005, + "housing": 246.89999999999998, + "education": 123.44999999999999, + "tax": 82.30000000000001, + "event": 41.150000000000006 + }, + "totalExpense": 823.0, + "netCashFlow": -823.0, + "assetBalance": -54723.0 + } + ], + "meta": { + "currencyUnit": "万円" + } + } + }, + "script": [ + { + "id": "intro", + "text": "はい、皆さんこんにちは!今回は、テスト家のファイナンシャルプランニングについて、詳しく解説していきます。将来の安心のために、一緒に確認していきましょう!", + "duration": 12.624, + "visualCue": "ppt", + "highlightArea": "full", + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 1, + "brollKeyword": "Japanese family planning full", + "audioPath": "public/slide_1_narration/narration_intro.mp3" + }, + { + "id": "section_1", + "text": "まず、ご家族の代表であるテスト太郎さん。1980年1月1日生まれの47歳でいらっしゃいます。情報通信業にお勤めで、現在の年収は703万円とのことです。現在の資産は800万円ですね。", + "duration": 17.4, + "visualCue": "zoom_in", + "highlightArea": "top", + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 1, + "brollKeyword": "Japanese family planning top", + "audioPath": "public/slide_1_narration/narration_section_1.mp3" + }, + { + "id": "section_2", + "text": "続きまして、配偶者であるテスト花子さん。1990年2月2日生まれの37歳で、卸売・小売業にお勤めです。現在の年収は368万円となっています。", + "duration": 13.512, + "visualCue": "zoom_in", + "highlightArea": "middle", + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 1, + "brollKeyword": "Japanese family planning middle", + "audioPath": "public/slide_1_narration/narration_section_2.mp3" + }, + { + "id": "section_3", + "text": "そして、お子様のテスト息子さん。2020年3月3日生まれの7歳ですね。教育プランとしては、保育園は認可、小学校は公立、中学校・高校は私立、そして大学は国公立をご検討されているとのことです。", + "duration": 17.328, + "visualCue": "zoom_in", + "highlightArea": "bottom", + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 1, + "brollKeyword": "Japanese family planning bottom", + "audioPath": "public/slide_1_narration/narration_section_3.mp3" + }, + { + "id": "section_4", + "text": "年間の支出は1038万円とのことですね。収入と支出のバランス、そして将来の教育資金について、詳しく見ていきましょう。", + "duration": 10.584, + "visualCue": "highlight_section", + "highlightArea": "full", + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 1, + "brollKeyword": "Japanese family planning full", + "audioPath": "public/slide_1_narration/narration_section_4.mp3" + }, + { + "id": "summary", + "text": "今回はご家族の基本情報を確認しました。次回は、これらの情報をもとに、具体的なファイナンシャルプランを立てていきましょう。", + "duration": 10.464, + "visualCue": "ppt", + "highlightArea": "full", + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": 1, + "brollKeyword": "Japanese family planning full", + "audioPath": "public/slide_1_narration/narration_summary.mp3" + } + ], + "assets": { + "broll": { + "Japanese family sitting together": "Family Gathering_5856567.mp4", + "Japanese couple calculating budget": "Budgeting Couple_7958685.mp4", + "Japanese man explaining feelings": "Expressing Feelings_7957918.mp4", + "Asian man nodding in agreement": "Nodding In Agreement_4586579.mp4", + "Japanese retired couple smiling": "Smiling Retirees_6761158.mp4", + "Japanese family visiting a new car": "Car Shopping_31980658.mp4", + "Japanese consultant pointing at document": "Consultant Pointing_7844849.mp4", + "Japanese advisor asking about family": "Advisor Inquiring_7844849.mp4", + "Asian man giving his birthday": "Giving Birthday_5529618.mp4", + "Japanese businessman greeting warmly": "Warm Greeting_3304352.mp4", + "Japanese student studying hard": "Studying Hard_7958453.mp4", + "Japanese calendar with events marked": "Marked Calendar_9057559.mp4", + "Japanese financial planner verifying age": "Verifying Age_6539952.mp4", + "Japanese advisor bowing politely": "Polite Bowing_7958678.mp4", + "Japanese man introduced himself": "Self-Introduction_7958453.mp4", + "Japanese financial consultant showing graphs": "Showing Graphs_7844858.mp4", + "Japanese financial advisor consulting client": "Client Consulting_4486777.mp4", + "Japanese man talking in interview": "Interview Talking_4428754.mp4" + }, + "videoClips": [ + { + "id": "clip_1", + "outputPath": "public\\clip_1_13.0-18.0.mp4", + "filepath": "public\\clip_1_13.0-18.0.mp4", + "start": 13.0, + "end": 18.0, + "duration": 5.0, + "description": "すいませんが、お客様のお名前からお願いいたします。\nはい、私がテストテロとして、家族情報として、\n生年月日の方は?\nはい、生年月日の方は、1980年の1月の1日です。" + }, + { + "id": "clip_2", + "outputPath": "public\\clip_2_52.0-57.0.mp4", + "filepath": "public\\clip_2_52.0-57.0.mp4", + "start": 52.0, + "end": 57.0, + "duration": 5.0, + "description": "すいませんが、前代の、ざっくりでよろしいので、年収はどのくらいになりますでしょうか。\n年収が今700万くらいですね。" + }, + { + "id": "clip_3", + "outputPath": "public\\clip_3_71.0-76.0.mp4", + "filepath": "public\\clip_3_71.0-76.0.mp4", + "start": 71.0, + "end": 76.0, + "duration": 5.0, + "description": "下の名前だけでいいので、奥様のお名前をお願いいたします。\n花子です。\nはい。奥様の生年月日を教えていただけますか。\n1990年の1月の10日です。" + } + ], + "slides": [ + { + "index": 0, + "title": "ライフプラン", + "image_path": "public/slide_001.png" + }, + { + "index": 1, + "title": "2", + "image_path": "public/slide_002.png" + }, + { + "index": 2, + "title": "3", + "image_path": "public/slide_003.png" + }, + { + "index": 3, + "title": "4", + "image_path": "public/slide_004.png" + }, + { + "index": 4, + "title": "5", + "image_path": "public/slide_005.png" + }, + { + "index": 5, + "title": "6", + "image_path": "public/slide_006.png" + }, + { + "index": 6, + "title": "7", + "image_path": "public/slide_007.png" + } + ], + "targetSlide": { + "index": 1, + "title": "2", + "text": "家族代表:テスト 太郎 生年月日:1980(昭和55)年 1月 1日 (47歳)\nお勤め先の業種:情報通信業 現時点年収: 703万円\n配偶者:テスト 花子 生年月日:1990(平成 2)年 2月 2日 (37歳)\nお勤め先の業種:卸売・小売業 現時点年収: 368万円\nお子さま:テスト 息子 生年月日:2020(令和 2)年 3月 3日 (7歳)\n進学プラン:\n ・保育園:認可(0歳~6歳) ・小学校:公立\n ・中学校:私立 ・高校:私立\n ・大学:国公立", + "notes": "", + "image_path": "public\\slide_002.png" + } + } +} \ No newline at end of file diff --git a/assets/1_processed/translation_cache.json b/assets/1_processed/translation_cache.json index ecb1079..0912709 100644 --- a/assets/1_processed/translation_cache.json +++ b/assets/1_processed/translation_cache.json @@ -44,5 +44,20 @@ "Japanese man introduced himself": "self-introduction", "Japanese financial consultant showing graphs": "showing graphs", "Japanese financial advisor consulting client": "client consulting", - "Japanese man talking in interview": "interview talking" + "Japanese man talking in interview": "interview talking", + "日本人実業家オンライン投資": "Japanese businessman investing online", + "アジア人女性経費追跡": "Asian woman tracking expenses", + "アジア人女性保険見直し": "Asian woman reviewing insurance policy", + "Japanese man worried about finances": "financial worries", + "Japanese financial advisor discussing insurance": "insurance discussion", + "Japanese businesswoman offering consultation": "business consultation", + "Japanese business team smiling": "smiling business team", + "Japanese family discussing finances": "family finances", + "Asian businessman analyzing investment data": "investment analysis", + "Japanese couple planning vacation": "vacation planning", + "Japanese financial advisor explaining chart": "chart explanation", + "Japanese parents talking about education": "education discussion", + "Japanese senior couple enjoying retirement": "retirement enjoyment", + "Japanese woman tracking expenses": "expense tracking", + "Japanese businessman smiling": "smiling businessman" } \ No newline at end of file diff --git a/assets/1_processed/video_segments.json b/assets/1_processed/video_segments.json new file mode 100644 index 0000000..5e2a7d2 --- /dev/null +++ b/assets/1_processed/video_segments.json @@ -0,0 +1,204 @@ +{ + "transcription": "お客様のライフプランを提供するために、お客様の基本情報をお願いいたします。 すいませんが、お客様のお名前からお願いいたします。 はい、私がテストテロとして、家族情報として、 生年月日の方は? はい、生年月日の方は、1980年の1月の1日です。 ということは、47歳ということでよろしいでしょうか。 はい。 現在のお勤め先はどこになりますでしょうか? IT系ですね。 IT系ですね。 はい。 すいませんが、前代の、ざっくりでよろしいので、年収はどのくらいになりますでしょうか。 年収が今700万くらいですね。 はい。 では、家族構成について、お客様、ご結婚はなされておりますか。 そうですね。 はい。 下の名前だけでいいので、奥様のお名前をお願いいたします。 花子です。 はい。奥様の生年月日を教えていただけますか。 1990年の1月の10日です。 ということは、現在37歳ということでよろしいでしょうか。 そうですね。 奥様は、ご勤めになられてますでしょうか。 そうですね。普通のサービス会ですけど、はい。 ざっくりでよろしいので、奥様の年収が600万くらいですね。 はい。 では続きまして、お子様の方はいらっしゃいますか。 はい、います。 何人いらっしゃいますか。 一人子だけです。 一人だけですね。 生年月日とかは。 2018年の3月の3日ですけど。 そうですか。 現在7歳ということで、たぶん小学校だと思いますけども、小学校の方は孤立ですでしょうか。 孤立です。 あ、孤立ですね。 ありがとうございます。", + "duration": 141.82000732421875, + "segments": [ + { + "start": 0.0, + "end": 13.0, + "text": "お客様のライフプランを提供するために、お客様の基本情報をお願いいたします。" + }, + { + "start": 13.0, + "end": 18.0, + "text": "すいませんが、お客様のお名前からお願いいたします。" + }, + { + "start": 18.0, + "end": 29.0, + "text": "はい、私がテストテロとして、家族情報として、" + }, + { + "start": 29.0, + "end": 32.0, + "text": "生年月日の方は?" + }, + { + "start": 32.0, + "end": 41.0, + "text": "はい、生年月日の方は、1980年の1月の1日です。" + }, + { + "start": 41.0, + "end": 44.0, + "text": "ということは、47歳ということでよろしいでしょうか。" + }, + { + "start": 44.0, + "end": 45.0, + "text": "はい。" + }, + { + "start": 45.0, + "end": 48.0, + "text": "現在のお勤め先はどこになりますでしょうか?" + }, + { + "start": 48.0, + "end": 50.0, + "text": "IT系ですね。" + }, + { + "start": 50.0, + "end": 51.0, + "text": "IT系ですね。" + }, + { + "start": 51.0, + "end": 52.0, + "text": "はい。" + }, + { + "start": 52.0, + "end": 58.0, + "text": "すいませんが、前代の、ざっくりでよろしいので、年収はどのくらいになりますでしょうか。" + }, + { + "start": 58.0, + "end": 61.0, + "text": "年収が今700万くらいですね。" + }, + { + "start": 61.0, + "end": 62.0, + "text": "はい。" + }, + { + "start": 62.0, + "end": 69.0, + "text": "では、家族構成について、お客様、ご結婚はなされておりますか。" + }, + { + "start": 69.0, + "end": 70.0, + "text": "そうですね。" + }, + { + "start": 70.0, + "end": 71.0, + "text": "はい。" + }, + { + "start": 71.0, + "end": 75.0, + "text": "下の名前だけでいいので、奥様のお名前をお願いいたします。" + }, + { + "start": 75.0, + "end": 76.0, + "text": "花子です。" + }, + { + "start": 76.0, + "end": 80.0, + "text": "はい。奥様の生年月日を教えていただけますか。" + }, + { + "start": 81.0, + "end": 88.0, + "text": "1990年の1月の10日です。" + }, + { + "start": 88.0, + "end": 91.0, + "text": "ということは、現在37歳ということでよろしいでしょうか。" + }, + { + "start": 91.0, + "end": 92.0, + "text": "そうですね。" + }, + { + "start": 92.0, + "end": 96.0, + "text": "奥様は、ご勤めになられてますでしょうか。" + }, + { + "start": 96.0, + "end": 100.0, + "text": "そうですね。普通のサービス会ですけど、はい。" + }, + { + "start": 100.0, + "end": 105.0, + "text": "ざっくりでよろしいので、奥様の年収が600万くらいですね。" + }, + { + "start": 105.0, + "end": 106.0, + "text": "はい。" + }, + { + "start": 106.0, + "end": 110.0, + "text": "では続きまして、お子様の方はいらっしゃいますか。" + }, + { + "start": 110.0, + "end": 112.0, + "text": "はい、います。" + }, + { + "start": 112.0, + "end": 114.0, + "text": "何人いらっしゃいますか。" + }, + { + "start": 114.0, + "end": 115.0, + "text": "一人子だけです。" + }, + { + "start": 115.0, + "end": 116.0, + "text": "一人だけですね。" + }, + { + "start": 116.0, + "end": 118.0, + "text": "生年月日とかは。" + }, + { + "start": 118.0, + "end": 123.0, + "text": "2018年の3月の3日ですけど。" + }, + { + "start": 123.0, + "end": 124.0, + "text": "そうですか。" + }, + { + "start": 124.0, + "end": 135.0, + "text": "現在7歳ということで、たぶん小学校だと思いますけども、小学校の方は孤立ですでしょうか。" + }, + { + "start": 135.0, + "end": 136.0, + "text": "孤立です。" + }, + { + "start": 136.0, + "end": 137.0, + "text": "あ、孤立ですね。" + }, + { + "start": 137.0, + "end": 140.0, + "text": "ありがとうございます。" + } + ], + "keywords": [ + "家族" + ] +} \ No newline at end of file diff --git a/backend/analyze_materials.py b/backend/analyze_materials.py new file mode 100644 index 0000000..d6991a3 --- /dev/null +++ b/backend/analyze_materials.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Analyze PPT and PDF materials to extract main content structure +""" + +import os +import sys +from pathlib import Path +from pptx import Presentation +import fitz # PyMuPDF + +class MaterialAnalyzer: + def __init__(self): + self.project_root = Path(__file__).parent.parent + + def analyze_ppt(self): + """Analyze PPT structure and content""" + print("=" * 80) + print("📊 PPT分析结果") + print("=" * 80) + + ppt_path = self.project_root / "assets/0_input/ライフプラン情報.pptx" + prs = Presentation(str(ppt_path)) + + print(f"\n总页数: {len(prs.slides)}页\n") + + for idx, slide in enumerate(prs.slides): + print(f"\n【第{idx + 1}页】") + print("-" * 60) + + # Extract title + if slide.shapes.title: + print(f"标题: {slide.shapes.title.text}") + + # Extract text content + text_content = [] + for shape in slide.shapes: + if hasattr(shape, "text") and shape.text.strip(): + if shape != slide.shapes.title: + text_content.append(shape.text.strip()) + + if text_content: + print(f"\n内容摘要:") + for i, text in enumerate(text_content[:5], 1): # Show first 5 items + preview = text[:100] + "..." if len(text) > 100 else text + print(f" {i}. {preview}") + + if len(text_content) > 5: + print(f" ... (还有{len(text_content) - 5}项内容)") + + print(f"\n文本框数量: {len(text_content)}") + + def analyze_pdf(self): + """Analyze PDF structure and content""" + print("\n\n" + "=" * 80) + print("📄 PDF分析结果") + print("=" * 80) + + pdf_path = self.project_root / "assets/0_input/帳票(お客様向け).pdf" + doc = fitz.open(str(pdf_path)) + + print(f"\n总页数: {len(doc)}页\n") + + for page_num in range(min(10, len(doc))): # Analyze first 10 pages + page = doc[page_num] + text = page.get_text() + + print(f"\n【第{page_num + 1}页】") + print("-" * 60) + + # Extract key information + lines = [line.strip() for line in text.split('\n') if line.strip()] + + if lines: + print(f"页面内容预览:") + for i, line in enumerate(lines[:15], 1): # Show first 15 lines + preview = line[:80] + "..." if len(line) > 80 else line + print(f" {i}. {preview}") + + if len(lines) > 15: + print(f" ... (还有{len(lines) - 15}行内容)") + else: + print(" (此页可能为图像或表格)") + + print(f"\n文本行数: {len(lines)}") + + if len(doc) > 10: + print(f"\n... (还有{len(doc) - 10}页未显示)") + + doc.close() + + def find_family_info_pages(self): + """Find pages containing family information""" + print("\n\n" + "=" * 80) + print("🔍 家庭信息页面定位") + print("=" * 80) + + pdf_path = self.project_root / "assets/0_input/帳票(お客様向け).pdf" + doc = fitz.open(str(pdf_path)) + + keywords = ["テスト太郎", "家族", "年齢", "年収", "生年月日", "基本情報", "家族構成"] + + print(f"\n搜索关键词: {', '.join(keywords)}\n") + + matches = [] + for page_num in range(len(doc)): + page = doc[page_num] + text = page.get_text() + + found_keywords = [kw for kw in keywords if kw in text] + if found_keywords: + matches.append((page_num, found_keywords, text)) + + if matches: + print(f"找到{len(matches)}个包含家庭信息的页面:\n") + for page_num, keywords_found, text in matches[:5]: # Show first 5 + print(f"【PDF第{page_num + 1}页】(pdfPageIndex={page_num})") + print(f" 匹配关键词: {', '.join(keywords_found)}") + + # Show excerpt + lines = [line.strip() for line in text.split('\n') if line.strip()] + print(f" 内容片段:") + for line in lines[:8]: + preview = line[:70] + "..." if len(line) > 70 else line + print(f" {preview}") + print() + else: + print("未找到包含家庭信息的页面") + + doc.close() + + def run(self): + """Execute full analysis""" + try: + self.analyze_ppt() + self.analyze_pdf() + self.find_family_info_pages() + + print("\n" + "=" * 80) + print("✅ 分析完成") + print("=" * 80) + + except Exception as e: + print(f"\n❌ 分析失败: {e}") + import traceback + traceback.print_exc() + +if __name__ == "__main__": + analyzer = MaterialAnalyzer() + analyzer.run() diff --git a/backend/audio_generator.py b/backend/audio_generator.py index 5a72730..732a3d8 100644 --- a/backend/audio_generator.py +++ b/backend/audio_generator.py @@ -38,7 +38,7 @@ class AudioGenerator: def generate_audio( self, script_segments: List[Dict[str, Any]], - voice: str = "alloy", + voice: str = "nova", model: str = "tts-1" ) -> List[Dict[str, Any]]: """ @@ -136,7 +136,7 @@ class AudioGenerator: def generate_audio_for_script( script_data: Dict[str, Any], - voice: str = "alloy" + voice: str = "nova" ) -> Dict[str, Any]: """ Convenience function to generate audio for a script diff --git a/backend/dialogue_video_generator.py b/backend/dialogue_video_generator.py new file mode 100644 index 0000000..8d10b11 --- /dev/null +++ b/backend/dialogue_video_generator.py @@ -0,0 +1,280 @@ +""" +Dialogue Video Generator Module + +This module extracts dialogue from video files, segments audio, +and generates render props for dialogue-style videos with speech bubbles. + +Usage: + python backend/dialogue_video_generator.py --video path/to/video.mp4 + python backend/dialogue_video_generator.py # Auto-detect from assets/0_input/ +""" + +import argparse +import json +import os +import subprocess +from pathlib import Path +from typing import Dict, Any, List + +from dotenv import load_dotenv +from backend.extractor import VideoExtractor + + +class DialogueVideoGenerator: + """Generate dialogue video assets from interview recordings""" + + def __init__(self, video_path: str = None): + """ + Initialize the generator + + Args: + video_path: Path to video file. If None, auto-detect from assets/0_input/ + """ + load_dotenv() + self.project_root = Path(__file__).parent.parent + self.video_path = self._resolve_video_path(video_path) + self.segments_output = self.project_root / "assets/1_processed/video_segments.json" + self.script_output = self.project_root / "assets/1_processed/dialogue_script.json" + self.props_output = self.project_root / "assets/1_processed/render_props_dialogue.json" + self.audio_output_dir = self.project_root / "public/dialogue" + + def _resolve_video_path(self, video_path: str = None) -> Path: + """Resolve video path from input or auto-detect""" + if video_path: + return Path(video_path) + + # Auto-detect from assets/0_input/ + input_dir = self.project_root / "assets/0_input" + video_extensions = ["*.mp4", "*.mov", "*.avi", "*.mkv"] + + for ext in video_extensions: + video_files = list(input_dir.glob(ext)) + if video_files: + print(f"✓ Auto-detected video: {video_files[0].name}") + return video_files[0] + + raise FileNotFoundError("No video file found. Please provide --video path or place video in assets/0_input/") + + def extract_segments(self) -> Dict[str, Any]: + """ + Extract audio transcription and timestamps from video + + Returns: + Dictionary with transcription, segments, and metadata + """ + print(f"📹 Extracting segments from: {self.video_path.name}") + + if not self.video_path.exists(): + raise FileNotFoundError(f"Video file not found: {self.video_path}") + + extractor = VideoExtractor() + result = extractor.extract(str(self.video_path)) + + # Save segments + with open(self.segments_output, "w", encoding="utf-8") as f: + json.dump(result, f, ensure_ascii=False, indent=2) + + print(f"✓ Saved {len(result['segments'])} segments to {self.segments_output.name}") + return result + + def slice_audio(self, input_path: str, start: float, end: float, output_path: str): + """Slice audio segment using ffmpeg""" + duration = end - start + cmd = [ + "ffmpeg", "-y", + "-ss", str(start), + "-t", str(duration), + "-i", str(input_path), + "-c:a", "libmp3lame", "-b:a", "128k", + str(output_path) + ] + subprocess.run(cmd, check=True, capture_output=True) + + def identify_speaker(self, text: str, last_speaker: str) -> str: + """ + Identify speaker based on text content + + Args: + text: Dialogue text + last_speaker: Previous segment's speaker (for alternation) + + Returns: + Speaker label: "FP" or "家族代表様" + """ + # FP (Financial Planner) keywords + fp_keywords = [ + "?", "お願いいたします", "でしょうか", + "教えていただけますか", "ありがとうございます", + "いらっしゃいますか", "そうですか" + ] + + is_fp = any(kw in text for kw in fp_keywords) + + # Short confirmations alternate between speakers + if text in ["はい。", "そうですね。"]: + return "FP" if last_speaker == "家族代表様" else "家族代表様" + + return "FP" if is_fp else "家族代表様" + + def generate_audio_clips(self, segments: List[Dict]) -> List[Dict]: + """ + Generate individual audio clips for each dialogue segment + + Args: + segments: List of segment dictionaries with text and timestamps + + Returns: + List of processed segments with speaker labels and audio paths + """ + print(f"🎙️ Generating {len(segments)} audio clips...") + + # Create output directory + self.audio_output_dir.mkdir(parents=True, exist_ok=True) + + # Find audio file + audio_path = self.video_path.parent / f"{self.video_path.stem}_audio.wav" + if not audio_path.exists(): + raise FileNotFoundError(f"Audio file not found: {audio_path}") + + processed_segments = [] + last_speaker = "家族代表様" + + for i, seg in enumerate(segments): + text = seg["text"] + speaker = self.identify_speaker(text, last_speaker) + last_speaker = speaker + + # Generate audio clip + segment_filename = f"dialogue_seg_{i:03d}.mp3" + segment_path = self.audio_output_dir / segment_filename + + print(f" [{i+1}/{len(segments)}] {text[:30]}...") + self.slice_audio(str(audio_path), seg["start"], seg["end"], str(segment_path)) + + processed_segments.append({ + "id": i + 1, + "text": text, + "duration": seg["end"] - seg["start"], + "type": "dialogue", + "visualType": "dialogue", + "speaker": speaker, + "audioPath": f"public/dialogue/{segment_filename}", + "brollKeyword": "Japanese interview" + }) + + # Save dialogue script + with open(self.script_output, "w", encoding="utf-8") as f: + json.dump(processed_segments, f, ensure_ascii=False, indent=2) + + print(f"✓ Generated {len(processed_segments)} dialogue segments") + return processed_segments + + def create_render_props(self, dialogue_script: List[Dict]) -> Dict[str, Any]: + """ + Create render_props.json for dialogue video + + Args: + dialogue_script: List of dialogue segments + + Returns: + Complete render props dictionary + """ + print("📝 Creating render props for dialogue video...") + + # Load original render_props for meta and charts + original_props_path = self.project_root / "assets/1_processed/render_props.json" + + if original_props_path.exists(): + with open(original_props_path, "r", encoding="utf-8") as f: + original_props = json.load(f) + else: + # Minimal fallback structure + original_props = { + "meta": {"title": "対話動画", "currencyUnit": "万円", "duration": 180}, + "charts": {}, + "assets": {"broll": {}, "videoClips": [], "slides": []} + } + + # Construct new props + new_props = { + "meta": original_props.get("meta", {}), + "charts": original_props.get("charts", {}), + "script": dialogue_script, + "assets": original_props.get("assets", {}) + } + + # Update title + if "title" in new_props["meta"]: + new_props["meta"]["title"] = "【対話版】" + new_props["meta"]["title"] + + # Save render props + with open(self.props_output, "w", encoding="utf-8") as f: + json.dump(new_props, f, ensure_ascii=False, indent=2) + + print(f"✓ Saved render props to {self.props_output.name}") + return new_props + + def run(self) -> str: + """ + Execute full dialogue video generation pipeline + + Returns: + Path to generated render_props.json + """ + print("🚀 Starting Dialogue Video Generation Pipeline...") + print() + + # Step 1: Extract segments + result = self.extract_segments() + segments = result["segments"] + print() + + # Step 2: Generate audio clips + processed_segments = self.generate_audio_clips(segments) + print() + + # Step 3: Create render props + self.create_render_props(processed_segments) + print() + + print(f"✅ Pipeline complete! Use the following command to render:") + print(f" npx remotion render MainVideo assets/2_output/dialogue_video.mp4 \\") + print(f" --props=\"{self.props_output.relative_to(self.project_root)}\"") + + return str(self.props_output) + + +def main(): + """CLI entry point""" + parser = argparse.ArgumentParser( + description="Dialogue Video Generator - Extract and render interview dialogues", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Examples: + python backend/dialogue_video_generator.py + python backend/dialogue_video_generator.py --video assets/0_input/interview.mp4 + """ + ) + + parser.add_argument( + "--video", + type=str, + help="Path to video file (auto-detect from assets/0_input/ if not provided)", + ) + + args = parser.parse_args() + + try: + generator = DialogueVideoGenerator(video_path=args.video) + generator.run() + except Exception as e: + print(f"\n❌ Generation failed: {e}") + import traceback + traceback.print_exc() + return 1 + + return 0 + + +if __name__ == "__main__": + exit(main()) diff --git a/backend/extractor.py b/backend/extractor.py index def3c05..97e9cea 100644 --- a/backend/extractor.py +++ b/backend/extractor.py @@ -41,7 +41,7 @@ class PDFExtractor: raise ImportError("google-genai not installed. Run: pip install google-genai") self.client = genai.Client(api_key=self.api_key) - self.model = 'gemini-2.0-flash-exp' + self.model = 'gemini-2.0-flash' def extract(self, pdf_path: str) -> Dict[str, Any]: """ @@ -109,6 +109,9 @@ class PDFExtractor: "target_amount": 目標金額(万円), "target_year": 達成目標年 } + ], + "advice": [ + "PDFの最後の方にある『対策とアドバイス』や『FPのコメント』から具体的な助言を箇条書きで抽出してください" ] } ``` diff --git a/backend/generate_combined_video.py b/backend/generate_combined_video.py new file mode 100644 index 0000000..1ca5a18 --- /dev/null +++ b/backend/generate_combined_video.py @@ -0,0 +1,302 @@ +""" +Generate comprehensive video using PDF pages as visual anchor (NOT PPT) + +CRITICAL: This script uses PDF page content as the structural backbone +- PDF pages are converted to images and used as visual materials +- PPT slides are NOT used as the main visual sequence +- Content organization follows PDF page structure + +Usage: + python backend/generate_combined_video.py +""" + +import argparse +import json +import os +from pathlib import Path +from typing import Dict, Any, List +from dotenv import load_dotenv + +from google import genai +from google.genai import types + + +class CombinedVideoGenerator: + """Generate video with PDF pages as structural anchor""" + + def __init__(self): + load_dotenv() + self.project_root = Path(__file__).parent.parent + self.api_key = os.getenv("GEMINI_API_KEY") + + if not self.api_key: + raise ValueError("GEMINI_API_KEY not found in .env") + + self.client = genai.Client(api_key=self.api_key) + + def convert_pdf_to_images(self) -> List[str]: + """Convert PDF pages to images for video use""" + print("📄 Converting PDF pages to images...") + + try: + import fitz # PyMuPDF + except ImportError: + print("⚠️ PyMuPDF not installed, using placeholder images") + return [] + + pdf_path = self.project_root / "assets/0_input/帳票(お客様向け).pdf" + output_dir = self.project_root / "public" / "pdf_pages" + output_dir.mkdir(parents=True, exist_ok=True) + + doc = fitz.open(str(pdf_path)) + image_paths = [] + + for page_num in range(len(doc)): + page = doc[page_num] + pix = page.get_pixmap(matrix=fitz.Matrix(2, 2)) # 2x resolution + + image_filename = f"pdf_page_{page_num + 1:03d}.png" + image_path = output_dir / image_filename + pix.save(str(image_path)) + + image_paths.append(f"pdf_pages/{image_filename}") + print(f" ✓ Page {page_num + 1}/{len(doc)}") + + doc.close() + print(f"✓ Converted {len(image_paths)} PDF pages") + return image_paths + + def load_all_materials(self) -> Dict[str, Any]: + """Load materials with PDF as primary visual source""" + import sys + sys.path.insert(0, str(self.project_root)) + + print("📦 Loading all materials...") + + # Convert PDF to images (PRIMARY VISUAL SOURCE) + pdf_images = self.convert_pdf_to_images() + + # Load existing render_props for charts ONLY + props_path = self.project_root / "assets/1_processed/render_props.json" + with open(props_path, "r", encoding="utf-8") as f: + props_data = json.load(f) + print(f"✓ Loaded chart data") + + # Prepare PDF summary + pdf_summary = { + "client_name": props_data["meta"].get("clientName", "お客様"), + "current_age": 47, + "spouse_age": 37, + "child_age": 7, + "annual_income": 703, + "current_assets": 836, + "annual_expenditure": 1038, + "charts": props_data["charts"], + "pdf_images": pdf_images # PRIMARY VISUAL ASSETS + } + print(f"✓ Prepared PDF data with {len(pdf_images)} page images") + + return { + "pdf": pdf_summary, + "existing_props": props_data + } + + def generate_comprehensive_script(self, materials: Dict) -> List[Dict]: + """ + Generate script using PDF page structure (NOT PPT) + + Structure based on PDF pages: + 1. Opening (intro) + 2. Family basic info (PDF page 1) + 3. Life events (PDF page 2) + 4. Asset projection intro (PDF page 3) + 5. Chart analysis (use chart view) + 6. Education plan (PDF page 4) + 7. Summary (PDF page 5) + """ + print("🤖 Generating script based on PDF structure...") + + pdf_data = materials["pdf"] + pdf_images = pdf_data["pdf_images"] + + prompt = f""" +あなたはプロのファイナンシャルプランナーであり、動画解説のナレーターです。 + +以下の情報に基づいて、**PDFページを視覚素材とする**解説動画のナレーション原稿を作成してください。 + +【重要】視覚素材はPDFページ画像を使用します(PPTスライドではありません) + +【家族情報】 +- 家族代表: {pdf_data["client_name"]} ({pdf_data["current_age"]}歳) +- 配偶者: {pdf_data["spouse_age"]}歳 +- お子様: {pdf_data["child_age"]}歳 +- 現在の年収: {pdf_data["annual_income"]}万円 +- 現在の資産: {pdf_data["current_assets"]}万円 +- 年間支出: {pdf_data["annual_expenditure"]}万円 + +【利用可能なPDFページ画像】 +{len(pdf_images)}ページ分の画像が利用可能 + +【要件】 +1. 以下の構成で原稿を作成(**家族成員紹介のみ**): + - intro: オープニング(10秒、家族紹介の導入) + - rep_intro: 家族代表紹介(20秒、PDFページ1、代表者の詳細) + - spouse_intro: 配偶者紹介(15秒、PDFページ1、配偶者の詳細) + - child_intro: お子様紹介(15秒、PDFページ1、お子様と教育プラン) + - family_summary: 家族紹介まとめ(10秒、家族全体のまとめ) + +2. 各セグメントの構造: + - id: セグメントID + - text: ナレーション文(具体的な数値・年齢・職業を含む) + - duration: 推定時間(秒) + - visualType: "pdf_page" + - pdfPageIndex: PDFページ番号(0始まり) + - highlightArea: "full" + +3. **重要**: 家族成員の年齢、職業、年収など具体的な情報を丁寧に紹介 +4. 温かみのある親しみやすい語り口で、家族の魅力を伝える + +**出力形式**: JSON配列 +""" + + response = self.client.models.generate_content( + model="gemini-2.0-flash", + contents=prompt, + config=types.GenerateContentConfig( + temperature=0.7, + response_mime_type="application/json" + ) + ) + + result = json.loads(response.text) + print(f"✓ Generated {len(result)} script segments") + return result + + def generate_audio(self, segments: List[Dict]) -> List[Dict]: + """Generate TTS audio for each segment""" + import sys + sys.path.insert(0, str(self.project_root)) + from backend.audio_generator import AudioGenerator + from backend.video_processor.utils import get_video_duration + + print("🎙️ Generating audio...") + + audio_gen = AudioGenerator() + output_dir = self.project_root / "public" / "pdf_narration" + output_dir.mkdir(parents=True, exist_ok=True) + + for i, seg in enumerate(segments): + text = seg["text"] + audio_filename = f"narration_{seg['id']}.mp3" + audio_path = output_dir / audio_filename + + print(f" [{i+1}/{len(segments)}] {text[:40]}...") + + try: + response = audio_gen.client.audio.speech.create( + model="tts-1", + voice="nova", + input=text + ) + response.stream_to_file(str(audio_path)) + + actual_duration = get_video_duration(str(audio_path)) + seg["duration"] = actual_duration + seg["audioPath"] = f"public/pdf_narration/{audio_filename}" + except Exception as e: + print(f" ⚠️ Failed: {e}") + continue + + print(f"✓ Generated {len(segments)} audio files") + return segments + + def create_render_props(self, segments: List[Dict], materials: Dict) -> Dict: + """Create render_props using PDF pages as visuals""" + + existing_props = materials["existing_props"] + pdf_images = materials["pdf"]["pdf_images"] + + # Build PDF page assets + pdf_page_assets = [ + { + "index": i, + "image_path": f"public/{img}", + "description": f"PDF Page {i+1}" + } + for i, img in enumerate(pdf_images) + ] + + new_props = { + "meta": { + "title": f"【PDF解説】{materials['pdf']['client_name']}様のライフプラン", + "currencyUnit": "万円", + "duration": sum(s.get("duration", 0) for s in segments), + "clientName": materials["pdf"]["client_name"] + }, + "charts": existing_props["charts"], + "script": segments, + "assets": { + "pdfPages": pdf_page_assets, # PDF pages as PRIMARY visuals + "slides": [], # Empty - not using PPT + "videoClips": existing_props["assets"].get("videoClips", []), + "broll": existing_props["assets"].get("broll", {}) + } + } + + output_path = self.project_root / "assets/1_processed/render_props_pdf_based.json" + with open(output_path, "w", encoding="utf-8") as f: + json.dump(new_props, f, ensure_ascii=False, indent=2) + + print(f"✓ Saved PDF-based render props to {output_path.name}") + return new_props + + def run(self) -> str: + """Execute full pipeline""" + print("🚀 Generating PDF-based comprehensive video...\n") + + # Load materials (PDF as primary) + materials = self.load_all_materials() + print() + + # Generate script + segments = self.generate_comprehensive_script(materials) + print() + + # Generate audio + segments = self.generate_audio(segments) + print() + + # Create render props + props = self.create_render_props(segments, materials) + print() + + output_file = "assets/2_output/pdf_based_video.mp4" + print(f"✅ Pipeline complete! Render command:") + print(f" npx remotion render MainVideo {output_file} \\") + print(f" --props=\"assets/1_processed/render_props_pdf_based.json\"") + print() + print("📋 改动说明:") + print(" 1. 替换视觉素材: PPT slides → PDF page images") + print(" 2. 结构锚点: 按PDF页面组织内容,而非PPT顺序") + print(" 3. 新增assets.pdfPages字段存储PDF页面图像") + print(" 4. visualType: 'pdf_page'(替代'ppt')") + print(" 5. pdfPageIndex: 指向PDF页码(替代slideIndex)") + + return output_file + + +def main(): + try: + generator = CombinedVideoGenerator() + generator.run() + except Exception as e: + print(f"\n❌ Generation failed: {e}") + import traceback + traceback.print_exc() + return 1 + + return 0 + + +if __name__ == "__main__": + exit(main()) diff --git a/backend/generate_detailed_narration.py b/backend/generate_detailed_narration.py new file mode 100644 index 0000000..2a468ae --- /dev/null +++ b/backend/generate_detailed_narration.py @@ -0,0 +1,283 @@ +""" +Generate detailed narration video for specific PPT slide with PDF context + +This script creates a comprehensive narration video combining: +1. PPT slide content (text + visual) +2. PDF financial data context +3. AI-generated detailed explanation +4. Smooth transitions between content sections + +Usage: + python backend/generate_detailed_narration.py --slide 2 +""" + +import argparse +import json +import os +from pathlib import Path +from typing import Dict, Any, List +from dotenv import load_dotenv + +# Import Gemini API +from google import genai +from google.genai import types + + +class DetailedNarrationGenerator: + """Generate detailed narration video for specific slide""" + + def __init__(self, slide_index: int = 2): + load_dotenv() + self.project_root = Path(__file__).parent.parent + self.slide_index = slide_index + self.api_key = os.getenv("GEMINI_API_KEY") + + if not self.api_key: + raise ValueError("GEMINI_API_KEY not found in .env") + + self.client = genai.Client(api_key=self.api_key) + + def load_ppt_slide(self) -> Dict[str, Any]: + """Load specific PPT slide data""" + import sys + sys.path.insert(0, str(self.project_root)) + from backend.ppt_extractor import extract_ppt_data + + ppt_path = self.project_root / "assets/0_input/ライフプラン情報.pptx" + ppt_data = extract_ppt_data(str(ppt_path)) + + if self.slide_index >= len(ppt_data["slides"]): + raise ValueError(f"Slide {self.slide_index} not found") + + return ppt_data["slides"][self.slide_index] + + def load_pdf_context(self) -> Dict[str, Any]: + """Load PDF financial data as context""" + import sys + sys.path.insert(0, str(self.project_root)) + from backend.extractor import extract_pdf_data + + pdf_path = self.project_root / "assets/0_input/帳票(お客様向け).pdf" + return extract_pdf_data(str(pdf_path)) + + def generate_narration_script(self, slide: Dict, pdf_data: Dict) -> List[Dict]: + """ + Generate detailed narration script using Gemini + + Returns: + List of narration segments with text, duration, visual cues + """ + print(f"🤖 Generating detailed narration for slide {self.slide_index}...") + + prompt = f""" +あなたはプロのファイナンシャルプランナーであり、親しみやすい動画解説者です。 + +以下の情報に基づいて、詳細な解説動画用のナレーション原稿を作成してください。 + +【PPTスライド内容】 +タイトル: {slide['title']} +テキスト: +{slide['text']} + +【PDFから抽出した追加情報】 +- 家族代表: {pdf_data.get('client_name', 'テスト太郎')} ({pdf_data.get('current_age', 47)}歳) +- 年収: {pdf_data.get('annual_income', 703)}万円 +- 現在の資産: {pdf_data.get('current_assets', 836)}万円 +- 年間支出: {pdf_data.get('annual_expenditure', 1038)}万円 + +【要件】 +1. スライドの内容を**段落ごとに分解**し、各段落を詳細に解説してください +2. 各セグメントは以下の構造で出力してください: + - intro: スライド全体の導入(15秒程度) + - section_1: 家族代表の基本情報(20秒程度) + - section_2: 配偶者情報(15秒程度) + - section_3: お子様情報と教育プラン(20秒程度) + - summary: まとめ(10秒程度) + +3. 各セグメントには以下を含めてください: + - text: ナレーション文(自然な口語体、具体的な数値を含む) + - duration: 推定時間(秒) + - visualCue: 画面表示の指示("ppt" / "zoom_in" / "highlight_section") + - highlightArea: 強調する領域("top" / "middle" / "bottom" / "full") + +4. 数値やデータは必ず具体的に言及し、抽象的な表現は避けてください +5. 親しみやすく、わかりやすい言葉遣いを心がけてください + +**出力形式**: JSON配列として返してください +[ + {{ + "id": "intro", + "text": "それでは、ご家族の基本情報について詳しく見ていきましょう。...", + "duration": 15, + "visualCue": "ppt", + "highlightArea": "full" + }}, + ... +] +""" + + response = self.client.models.generate_content( + model="gemini-2.0-flash", + contents=prompt, + config=types.GenerateContentConfig( + temperature=0.7, + response_mime_type="application/json" + ) + ) + + result = json.loads(response.text) + print(f"✓ Generated {len(result)} narration segments") + return result + + def create_smooth_transitions(self, segments: List[Dict]) -> List[Dict]: + """Add transition effects between segments""" + enhanced_segments = [] + + for i, seg in enumerate(segments): + # Enhance segment with visual metadata + enhanced_seg = { + **seg, + "type": "narration", + "visualType": "ppt", + "visualAssetIndex": self.slide_index, + "brollKeyword": f"Japanese family planning {seg.get('highlightArea', 'full')}", + } + + enhanced_segments.append(enhanced_seg) + + return enhanced_segments + + def generate_audio(self, segments: List[Dict]) -> List[Dict]: + """Generate TTS audio for each segment""" + import sys + sys.path.insert(0, str(self.project_root)) + from backend.audio_generator import AudioGenerator + from backend.video_processor.utils import get_video_duration + + print("🎙️ Generating audio for narration segments...") + + audio_gen = AudioGenerator() + output_dir = self.project_root / "public" / f"slide_{self.slide_index}_narration" + output_dir.mkdir(parents=True, exist_ok=True) + + for i, seg in enumerate(segments): + text = seg["text"] + audio_filename = f"narration_{seg['id']}.mp3" + audio_path = output_dir / audio_filename + + print(f" [{i+1}] Generating: {text[:50]}...") + + # Use OpenAI TTS API directly + try: + response = audio_gen.client.audio.speech.create( + model="tts-1", + voice="nova", + input=text + ) + response.stream_to_file(str(audio_path)) + + # Get actual duration + actual_duration = get_video_duration(str(audio_path)) + seg["duration"] = actual_duration + + seg["audioPath"] = f"public/slide_{self.slide_index}_narration/{audio_filename}" + except Exception as e: + print(f" ⚠️ Failed: {e}") + continue + + print(f"✓ Generated audio for {len(segments)} segments") + return segments + + def create_render_props(self, segments: List[Dict], slide: Dict, pdf_data: Dict) -> Dict: + """Create render_props.json for the detailed narration video""" + + # Load original props for charts + original_props_path = self.project_root / "assets/1_processed/render_props.json" + if original_props_path.exists(): + with open(original_props_path, "r", encoding="utf-8") as f: + original_props = json.load(f) + else: + original_props = {"charts": {}, "assets": {"slides": []}} + + # Construct new props + new_props = { + "meta": { + "title": f"【詳細解説】{slide['title']} - {pdf_data.get('client_name', 'お客様')}様", + "currencyUnit": "万円", + "duration": sum(s.get("duration", 0) for s in segments), + "clientName": pdf_data.get("client_name", "お客様") + }, + "charts": original_props.get("charts", {}), + "script": segments, + "assets": { + **original_props.get("assets", {}), + "targetSlide": slide + } + } + + # Save to file + output_path = self.project_root / f"assets/1_processed/render_props_slide_{self.slide_index}_detailed.json" + with open(output_path, "w", encoding="utf-8") as f: + json.dump(new_props, f, ensure_ascii=False, indent=2) + + print(f"✓ Saved render props to {output_path.name}") + return new_props + + def run(self) -> str: + """Execute full pipeline""" + print(f"🚀 Generating detailed narration video for slide {self.slide_index}...") + print() + + # Load data + slide = self.load_ppt_slide() + pdf_data = self.load_pdf_context() + print(f"✓ Loaded slide: {slide['title']}") + print(f"✓ Loaded PDF context for: {pdf_data.get('client_name')}") + print() + + # Generate narration + segments = self.generate_narration_script(slide, pdf_data) + print() + + # Add transitions + segments = self.create_smooth_transitions(segments) + print(f"✓ Added smooth transitions") + print() + + # Generate audio + segments = self.generate_audio(segments) + print() + + # Create render props + props = self.create_render_props(segments, slide, pdf_data) + print() + + output_file = f"assets/2_output/slide_{self.slide_index}_detailed.mp4" + print(f"✅ Pipeline complete! Use the following command to render:") + print(f" npx remotion render MainVideo {output_file} \\") + print(f" --props=\"assets/1_processed/render_props_slide_{self.slide_index}_detailed.json\"") + + return output_file + + +def main(): + parser = argparse.ArgumentParser( + description="Generate detailed narration video for specific PPT slide" + ) + parser.add_argument("--slide", type=int, default=2, help="Slide index (default: 2)") + args = parser.parse_args() + + try: + generator = DetailedNarrationGenerator(slide_index=args.slide) + generator.run() + except Exception as e: + print(f"\n❌ Generation failed: {e}") + import traceback + traceback.print_exc() + return 1 + + return 0 + + +if __name__ == "__main__": + exit(main()) diff --git a/backend/generate_family_intro.py b/backend/generate_family_intro.py new file mode 100644 index 0000000..db1c9d9 --- /dev/null +++ b/backend/generate_family_intro.py @@ -0,0 +1,291 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Generate family introduction video combining PPT and PDF pages +Focus: Family member introduction ONLY +""" + +import os +import json +import sys +from pathlib import Path +from typing import Dict, List +from dotenv import load_dotenv +from google import genai +from google.genai import types + +# Load environment +load_dotenv() + +class FamilyIntroGenerator: + def __init__(self): + self.project_root = Path(__file__).parent.parent + + # Initialize Gemini client + api_key = os.getenv("GEMINI_API_KEY") + if not api_key: + raise ValueError("GEMINI_API_KEY not found in environment") + self.client = genai.Client(api_key=api_key) + + def load_materials(self) -> Dict: + """Load PPT, PDF and existing render_props data""" + print("📦 Loading materials...") + + # Load existing render_props + props_path = self.project_root / "assets/1_processed/render_props.json" + with open(props_path, encoding="utf-8") as f: + props_data = json.load(f) + + # Convert PDF pages to images + pdf_images = self.convert_pdf_to_images() + + # Extract family info from existing data + family_info = { + "rep_name": props_data["meta"].get("clientName", "テスト太郎"), + "rep_age": 47, + "rep_birth": "1980年1月1日", + "rep_income": 703, + "rep_industry": "情報通信業", + "spouse_name": "花子", + "spouse_age": 37, + "spouse_birth": "1990年2月2日", + "spouse_income": 368, + "spouse_industry": "卸売・小売業", + "child_name": "息子", + "child_age": 7, + "child_birth": "2020年3月3日", + "child_education": "保育園認可→小学校公立→中学校私立", + "total_income": 1071, + "total_assets": 852, + "annual_expense": 1038 + } + + print(f"✓ Loaded PPT slides: {len(props_data['assets']['slides'])} pages") + print(f"✓ Loaded PDF images: {len(pdf_images)} pages") + + return { + "family": family_info, + "ppt_slides": props_data["assets"]["slides"], + "pdf_images": pdf_images, + "broll": props_data["assets"].get("broll", {}), + "video_clips": props_data["assets"].get("videoClips", []), + "existing_props": props_data + } + + def convert_pdf_to_images(self) -> List[str]: + """Convert PDF pages to images""" + import fitz # PyMuPDF + + print("📄 Converting PDF pages to images...") + + pdf_path = self.project_root / "assets/0_input/帳票(お客様向け).pdf" + output_dir = self.project_root / "public" / "pdf_pages" + output_dir.mkdir(parents=True, exist_ok=True) + + doc = fitz.open(str(pdf_path)) + image_paths = [] + + for page_num in range(len(doc)): + page = doc[page_num] + pix = page.get_pixmap(matrix=fitz.Matrix(2, 2)) + + image_filename = f"pdf_page_{page_num + 1:03d}.png" + image_path = output_dir / image_filename + pix.save(str(image_path)) + image_paths.append(f"pdf_pages/{image_filename}") + + if (page_num + 1) % 10 == 0: + print(f" ✓ Converted {page_num + 1}/{len(doc)} pages") + + print(f"✓ Converted {len(doc)} PDF pages") + doc.close() + return image_paths + + def generate_script(self, materials: Dict) -> List[Dict]: + """Generate family introduction script with PPT and PDF switching""" + print("🤖 Generating family introduction script...") + + family = materials["family"] + + prompt = f""" +あなたはプロのファイナンシャルプランナーであり、動画ナレーターです。 + +【重要】家族成員紹介のみに焦点を当てた動画原稿を作成してください。 +PPTページとPDFページを適切に切り替えながら、家族の魅力を伝えます。 + +【家族情報】 +- 家族代表: {family["rep_name"]} ({family["rep_age"]}歳、生年月日{family["rep_birth"]}) + 業種: {family["rep_industry"]} + 年収: {family["rep_income"]}万円 +- 配偶者: {family["spouse_name"]} ({family["spouse_age"]}歳、生年月日{family["spouse_birth"]}) + 業種: {family["spouse_industry"]} + 年収: {family["spouse_income"]}万円 +- お子様: {family["child_name"]} ({family["child_age"]}歳、生年月日{family["child_birth"]}) + 教育: {family["child_education"]} +- 世帯年収: {family["total_income"]}万円 +- 現在資産: {family["total_assets"]}万円 +- 年間支出: {family["annual_expense"]}万円 + +【利用可能な視覚素材】 +- PPTスライド: {len(materials["ppt_slides"])}ページ + スライド0=タイトルページ「ライフプラン」 + スライド1=家族基本情報ページ(テスト太郎47歳/花子37歳/息子7歳、業種・年収・進学プラン詳細) +- PDFページ: {len(materials["pdf_images"])}ページ + ページ0=表紙 + ページ1=目次 + ページ2=家族基本情報詳細(テスト太郎/花子/息子の生年月日・年齢・年収・業種) + ページ3=ライフイベント一覧 + +【要件】 +1. 以下の構成で原稿を作成(**家族成員紹介のみ**): + - intro: オープニング(10秒、PPTスライド0でタイトル表示) + - family_overview: 家族全体の概要(20秒、PPTスライド1、3人家族構成・業種・年収紹介) + - family_details: 家族詳細情報(30秒、PDFページ2のまま継続、代表者→配偶者→子供の詳細) + - financial_summary: 家計まとめ(10秒、PPTスライド1で締めくくり) + +2. 各セグメントの構造: + - id: セグメントID(英数字) + - text: ナレーション文(温かみのある語り口、具体的な数値・業種含む) + - duration: 推定時間(秒) + - visualType: "ppt" or "pdf_page" + - visualAssetIndex: PPTスライド番号(visualType="ppt"の場合、0始まり) + - pdfPageIndex: PDFページ番号(visualType="pdf_page"の場合、0始まり) + - highlightArea: "full" + +3. **重要ポイント**: + - PPT素材を最大活用:スライド1には家族全員の詳細情報が記載されている + - 同じページは連続して使用し、途中で別ページに切り替えない + - PPTスライド1で家族概要を紹介後、PDFページ2で各成員の詳細を深掘り + - 各家族成員の個性や魅力を丁寧に紹介(年齢・生年月日・業種・年収すべて言及) + +**出力形式**: JSON配列のみ +""" + + response = self.client.models.generate_content( + model="gemini-2.0-flash", + contents=prompt, + config=types.GenerateContentConfig( + temperature=0.7, + response_mime_type="application/json" + ) + ) + + result = json.loads(response.text) + print(f"✓ Generated {len(result)} script segments") + return result + + def generate_audio(self, segments: List[Dict]) -> List[Dict]: + """Generate TTS audio for each segment""" + import sys + sys.path.insert(0, str(self.project_root)) + from backend.audio_generator import AudioGenerator + from backend.video_processor.utils import get_video_duration + + print("🎙️ Generating audio...") + + audio_gen = AudioGenerator() + output_dir = self.project_root / "public" / "family_intro_audio" + output_dir.mkdir(parents=True, exist_ok=True) + + for i, seg in enumerate(segments): + text = seg["text"] + audio_filename = f"narration_{seg['id']}.mp3" + audio_path = output_dir / audio_filename + + print(f" [{i+1}/{len(segments)}] {seg['id']}: {text[:30]}...") + + try: + response = audio_gen.client.audio.speech.create( + model="tts-1", + voice="nova", + input=text + ) + response.stream_to_file(str(audio_path)) + + actual_duration = get_video_duration(str(audio_path)) + seg["duration"] = actual_duration + seg["audioPath"] = f"public/family_intro_audio/{audio_filename}" + except Exception as e: + print(f" ⚠️ Failed: {e}") + continue + + print(f"✓ Generated {len(segments)} audio files") + return segments + + def create_render_props(self, segments: List[Dict], materials: Dict) -> Dict: + """Create render_props with PPT and PDF pages""" + + existing_props = materials["existing_props"] + pdf_images = materials["pdf_images"] + + # Build PDF page assets + pdf_page_assets = [ + { + "index": i, + "image_path": f"public/{img}", + "description": f"PDF Page {i+1}" + } + for i, img in enumerate(pdf_images) + ] + + new_props = { + "meta": { + "title": f"【家族紹介】{materials['family']['rep_name']}様ご家族", + "currencyUnit": "万円", + "duration": sum(s.get("duration", 0) for s in segments), + "clientName": materials["family"]["rep_name"] + }, + "charts": existing_props.get("charts", {}), + "script": segments, + "assets": { + "pdfPages": pdf_page_assets, + "slides": existing_props["assets"]["slides"], # Keep PPT slides + "videoClips": existing_props["assets"].get("videoClips", []), + "broll": existing_props["assets"].get("broll", {}) + } + } + + output_path = self.project_root / "assets/1_processed/render_props_family_intro.json" + with open(output_path, "w", encoding="utf-8") as f: + json.dump(new_props, f, ensure_ascii=False, indent=2) + + print(f"✓ Saved family intro render props to {output_path.name}") + return new_props + + def run(self) -> str: + """Execute full pipeline""" + print("🚀 Generating family introduction video...\n") + + # Load materials + materials = self.load_materials() + print() + + # Generate script + segments = self.generate_script(materials) + print() + + # Generate audio + segments = self.generate_audio(segments) + print() + + # Create render props + props = self.create_render_props(segments, materials) + print() + + output_file = "assets/2_output/family_intro_video.mp4" + print(f"✅ Pipeline complete! Render command:") + print(f" npx remotion render MainVideo {output_file} \\") + print(f" --props=\"assets/1_processed/render_props_family_intro.json\" --concurrency=1") + print() + print("📋 改动说明:") + print(" 1. 内容范围: 仅家族成员介绍(代表者+配偶者+お子様)") + print(" 2. 视觉素材: PPT与PDF页面自然切换") + print(" 3. 无主干依赖: 两种素材平衡使用,不依赖单一文件作为主线") + print(" 4. 语调: 温暖亲切的家庭介绍风格") + print(f" 5. 总时长: {props['meta']['duration']:.1f}秒") + + return output_file + +if __name__ == "__main__": + generator = FamilyIntroGenerator() + generator.run() diff --git a/backend/generate_ppt_intro_final.py b/backend/generate_ppt_intro_final.py new file mode 100644 index 0000000..cbe6999 --- /dev/null +++ b/backend/generate_ppt_intro_final.py @@ -0,0 +1,266 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Generate introduction video for PPT slides 2 & 3 +Final version - manually crafted detailed narration based on PDF/PPT content +Only requires OpenAI TTS API (no Gemini needed) +""" + +import os +import json +import sys +from pathlib import Path +from typing import Dict, List +from dotenv import load_dotenv + +# Load environment +load_dotenv() + + +class PPTIntroFinalGenerator: + def __init__(self): + self.project_root = Path(__file__).parent.parent + print("✓ Generator initialized") + + def create_detailed_script(self) -> List[Dict]: + """ + Create detailed narration script based on PDF/PPT analysis + Manually crafted for maximum quality and relevance + """ + + print("\n📝 Creating detailed narration script...") + + # Detailed script based on actual PDF/PPT content + # These are high-quality narrations that cover all important information + segments = [ + { + "id": "s2_welcome", + "text": "皆様、こんにちは。本日は、テスト太郎様とそのご家族のライフプランについてご紹介させていただきます。まずは、ご家族の基本情報からご覧ください。", + "estimatedDuration": 12, + "visualType": "ppt", + "visualAssetIndex": 1, # slide_002.png + "highlightArea": "full" + }, + { + "id": "s2_representative", + "text": "ご家族の代表者、テスト太郎様は現在47歳。1980年1月1日生まれで、情報通信業界でご活躍されています。年収は703万円と、安定した収入を得ていらっしゃいます。業界の専門知識を活かし、キャリアを積み重ねてこられました。", + "estimatedDuration": 28, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full" + }, + { + "id": "s2_spouse", + "text": "続いて、奥様の花子様は37歳。1990年2月2日生まれで、卸売・小売業でお仕事をされており、年収は368万円です。ご家族を支えながら、ご自身のキャリアも大切にされている、素敵な方です。", + "estimatedDuration": 23, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full" + }, + { + "id": "s2_child", + "text": "お子様は現在7歳。2020年3月3日生まれで、すくすくと成長されています。教育プランとしては、保育園の認可園からスタートし、公立小学校へ進学。その後、私立中学校での教育を予定されています。お子様の可能性を最大限に伸ばす、しっかりとした教育方針をお持ちです。", + "estimatedDuration": 32, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full" + }, + { + "id": "s2_household", + "text": "テスト様ご家族の世帯年収は、合計で1071万円。現在の資産は852万円をお持ちです。年間の支出は1038万円となっており、計画的な家計管理をされています。ご夫婦で力を合わせ、安定した家計を築いていらっしゃいますね。", + "estimatedDuration": 28, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full" + }, + { + "id": "s3_transition", + "text": "それでは次に、ご家族の将来に予定されているライフイベントについて見ていきましょう。こちらのスライドをご覧ください。", + "estimatedDuration": 11, + "visualType": "ppt", + "visualAssetIndex": 2, # slide_003.png + "highlightArea": "full" + }, + { + "id": "s3_life_events", + "text": "今後、さまざまなライフイベントが控えています。お子様の進学に伴う教育費、マイホームの購入や住宅ローンの返済、そして将来の退職後の生活設計まで。それぞれのイベントには、適切な資金準備が必要です。特に、私立中学校への進学費用や、退職後の生活資金については、長期的な視点での準備が重要となります。", + "estimatedDuration": 35, + "visualType": "ppt", + "visualAssetIndex": 2, + "highlightArea": "full" + }, + { + "id": "s3_planning", + "text": "私たちファイナンシャルプランナーは、テスト太郎様ご家族の夢や目標を実現するために、最適なライフプランをご提案させていただきます。資産運用、保険の見直し、教育資金の準備、退職後の生活設計まで、トータルでサポートいたします。一緒に、安心で豊かな未来を築いていきましょう。", + "estimatedDuration": 32, + "visualType": "ppt", + "visualAssetIndex": 2, + "highlightArea": "full" + }, + { + "id": "s3_closing", + "text": "ご清聴ありがとうございました。テスト様ご家族の明るい未来のために、これからも全力でサポートさせていただきます。", + "estimatedDuration": 10, + "visualType": "ppt", + "visualAssetIndex": 2, + "highlightArea": "full" + } + ] + + print(f" ✓ Created {len(segments)} detailed narration segments") + + # Display preview + print("\n 📝 Script Preview:") + total_duration = 0 + for i, seg in enumerate(segments, 1): + slide_num = seg['visualAssetIndex'] + 1 + duration = seg['estimatedDuration'] + total_duration += duration + print(f"\n {i}. [{seg['id']}] - Slide {slide_num} ({duration}s)") + print(f" {seg['text'][:70]}...") + + print(f"\n 📊 Total estimated duration: {total_duration}s") + + return segments + + def generate_audio(self, segments: List[Dict]) -> List[Dict]: + """Generate TTS audio using OpenAI""" + sys.path.insert(0, str(self.project_root)) + + try: + from backend.audio_generator import AudioGenerator + from backend.video_processor.utils import get_video_duration + except ImportError as e: + print(f"\n⚠️ Import error: {e}") + print(" Using estimated durations without audio generation") + for seg in segments: + seg["duration"] = seg.get("estimatedDuration", 10) + return segments + + print("\n🎙️ Generating audio with OpenAI TTS...") + + try: + audio_gen = AudioGenerator() + except ValueError as e: + print(f"\n⚠️ {e}") + print(" Using estimated durations without audio generation") + for seg in segments: + seg["duration"] = seg.get("estimatedDuration", 10) + return segments + + output_dir = self.project_root / "public" / "ppt_intro_final_audio" + output_dir.mkdir(parents=True, exist_ok=True) + + for i, seg in enumerate(segments, 1): + text = seg["text"] + audio_filename = f"narration_{seg['id']}.mp3" + audio_path = output_dir / audio_filename + + print(f" [{i}/{len(segments)}] {seg['id']}: Generating...") + + try: + response = audio_gen.client.audio.speech.create( + model="tts-1", + voice="nova", + input=text + ) + response.stream_to_file(str(audio_path)) + + actual_duration = get_video_duration(str(audio_path)) + seg["duration"] = actual_duration + seg["audioPath"] = f"public/ppt_intro_final_audio/{audio_filename}" + print(f" ✓ {actual_duration:.2f}s") + except Exception as e: + print(f" ⚠️ Failed: {e}") + seg["duration"] = seg.get("estimatedDuration", 10) + continue + + total_duration = sum(s.get("duration", 0) for s in segments) + print(f"\n ✓ Audio generation complete ({total_duration:.1f}s total)") + return segments + + def create_render_props(self, segments: List[Dict]) -> Dict: + """Create render_props configuration""" + print("\n📦 Creating render props...") + + # Load existing render_props for charts and assets + props_path = self.project_root / "assets/1_processed/render_props.json" + with open(props_path, encoding="utf-8") as f: + existing_props = json.load(f) + + new_props = { + "meta": { + "title": "テスト太郎様 ライフプラン紹介", + "currencyUnit": "万円", + "duration": sum(s.get("duration", 0) for s in segments), + "clientName": "テスト太郎" + }, + "charts": existing_props.get("charts", {}), + "script": segments, + "assets": { + "slides": existing_props["assets"]["slides"], + "videoClips": [], + "broll": existing_props["assets"].get("broll", {}) + } + } + + output_path = self.project_root / "assets/1_processed/render_props_ppt_intro_final.json" + with open(output_path, "w", encoding="utf-8") as f: + json.dump(new_props, f, ensure_ascii=False, indent=2) + + print(f" ✓ Saved to {output_path.name}") + return new_props + + def run(self) -> str: + """Execute full pipeline""" + print("=" * 70) + print("🚀 PPT Introduction Video Generator (Final Version)") + print("=" * 70) + + try: + # Create script + segments = self.create_detailed_script() + + # Generate audio + segments = self.generate_audio(segments) + + # Create render props + props = self.create_render_props(segments) + + # Summary + print("\n" + "=" * 70) + print("✅ Generation Complete!") + print("=" * 70) + + output_file = "assets/2_output/ppt_intro_final_video.mp4" + print(f"\n📹 Render command:") + print(f" npx remotion render MainVideo {output_file} \\") + print(f" --props=\"assets/1_processed/render_props_ppt_intro_final.json\" --concurrency=1") + + print(f"\n📊 Video Summary:") + print(f" - Target slides: slide_002.png, slide_003.png") + print(f" - Total segments: {len(segments)}") + print(f" - Total duration: {props['meta']['duration']:.1f}s") + print(f" - Client: {props['meta']['clientName']}") + print(f" - Config file: render_props_ppt_intro_final.json") + + print(f"\n📋 Content Coverage:") + print(f" ✓ 家族代表者(テスト太郎様)の詳細") + print(f" ✓ 配偶者(花子様)の情報") + print(f" ✓ お子様の教育プラン") + print(f" ✓ 世帯収入・資産・支出") + print(f" ✓ 将来のライフイベント") + print(f" ✓ ライフプランニングの提案") + + return output_file + + except Exception as e: + print(f"\n❌ Error: {e}") + import traceback + traceback.print_exc() + raise + + +if __name__ == "__main__": + generator = PPTIntroFinalGenerator() + generator.run() diff --git a/backend/generate_ppt_intro_video.py b/backend/generate_ppt_intro_video.py new file mode 100644 index 0000000..b215d93 --- /dev/null +++ b/backend/generate_ppt_intro_video.py @@ -0,0 +1,361 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Generate introduction video for PPT slides 2 & 3 with API-based content generation +- Extract detailed info from PDF using Gemini API +- Generate rich narration based on PDF data +- Only display PPT slides (no PDF page switching) +- Generate audio using OpenAI TTS +""" + +import os +import json +import sys +import time +from pathlib import Path +from typing import Dict, List +from dotenv import load_dotenv +from google import genai +from google.genai import types + +# Load environment +load_dotenv() + + +class PPTIntroVideoGenerator: + def __init__(self): + self.project_root = Path(__file__).parent.parent + + # Initialize Gemini client + api_key = os.getenv("GEMINI_API_KEY") + if not api_key: + raise ValueError("GEMINI_API_KEY not found in environment") + self.client = genai.Client(api_key=api_key) + + print("✓ Gemini API client initialized") + + def extract_pdf_info(self) -> Dict: + """Extract detailed information from PDF using Gemini""" + print("\n📄 Extracting information from PDF...") + + pdf_path = self.project_root / "assets/0_input/帳票(お客様向け).pdf" + + # Upload PDF to Gemini + print(" Uploading PDF...") + with open(pdf_path, 'rb') as f: + upload_config = types.UploadFileConfig(mime_type='application/pdf') + pdf_file = self.client.files.upload(file=f, config=upload_config) + + # Wait for processing + while pdf_file.state == "PROCESSING": + print(" ⏳ Processing PDF...") + time.sleep(2) + pdf_file = self.client.files.get(name=pdf_file.name) + + if pdf_file.state == "FAILED": + raise RuntimeError(f"PDF processing failed: {pdf_file.error}") + + print(" ✓ PDF uploaded successfully") + + # Extraction prompt - focus on family and life events + prompt = """ +このPDFから、家族紹介とライフイベントに関する詳細情報を抽出してください。 + +以下のJSON形式で出力してください: + +{ + "family": { + "representative": { + "name": "代表者名", + "age": 年齢, + "birth_date": "生年月日", + "occupation": "業種", + "annual_income": 年収(万円), + "description": "簡単な説明" + }, + "spouse": { + "name": "配偶者名", + "age": 年齢, + "birth_date": "生年月日", + "occupation": "業種", + "annual_income": 年収(万円), + "description": "簡単な説明" + }, + "children": [ + { + "name": "子供の呼称", + "age": 年齢, + "birth_date": "生年月日", + "education_plan": "進学プラン(保育園→小学校→中学校など)", + "description": "簡単な説明" + } + ], + "household": { + "total_income": 世帯年収(万円), + "annual_expenses": 年間支出(万円), + "current_assets": 現在資産(万円), + "savings_per_year": 年間貯蓄額(万円) + } + }, + "life_events": [ + { + "year": イベント発生年, + "age_representative": その時の代表者年齢, + "event_name": "イベント名", + "description": "詳細説明", + "cost": 費用(万円), + "category": "カテゴリー(教育/住宅/退職など)" + } + ], + "financial_outlook": { + "retirement_age": 退職年齢, + "life_expectancy": 想定寿命, + "key_concerns": ["懸念事項1", "懸念事項2"], + "opportunities": ["機会1", "機会2"] + } +} + +可能な限り具体的で詳細な情報を抽出してください。 +""" + + print(" Analyzing PDF content...") + response = self.client.models.generate_content( + model="gemini-2.0-flash-exp", + contents=[pdf_file, prompt], + config=types.GenerateContentConfig( + temperature=0.1, + response_mime_type="application/json" + ) + ) + + pdf_info = json.loads(response.text) + print(" ✓ PDF information extracted") + + # Print summary + family = pdf_info.get("family", {}) + rep = family.get("representative", {}) + print(f"\n 📊 Extracted Info:") + print(f" - Client: {rep.get('name')}") + print(f" - Household income: {family.get('household', {}).get('total_income')}万円") + print(f" - Life events: {len(pdf_info.get('life_events', []))} events") + + return pdf_info + + def generate_narration_script(self, pdf_info: Dict) -> List[Dict]: + """Generate narration script using Gemini based on PDF info""" + print("\n🤖 Generating narration script...") + + family = pdf_info.get("family", {}) + events = pdf_info.get("life_events", []) + outlook = pdf_info.get("financial_outlook", {}) + + prompt = f""" +あなたはプロのファイナンシャルプランナーであり、温かみのある動画ナレーターです。 + +【重要な制約】 +- PPTスライド2枚(slide_002.png と slide_003.png)のみを使用 +- スライド2: 家族基本情報(家族構成、年齢、職業、年収) +- スライド3: ライフイベント(将来の予定) +- 各スライドにつき2-4個のセグメントを作成 +- 合計5-7個のセグメントを生成 + +【抽出したPDF情報】 +■ 家族情報: +{json.dumps(family, ensure_ascii=False, indent=2)} + +■ ライフイベント(最初の5件): +{json.dumps(events[:5] if events else [], ensure_ascii=False, indent=2)} + +■ 将来展望: +{json.dumps(outlook, ensure_ascii=False, indent=2)} + +【要件】 +1. セグメント構造: + - id: ユニークなID(例: "s2_intro", "s2_family", "s3_events") + - text: ナレーション文(30-50秒分、温かく親しみやすい語り口) + - estimatedDuration: 推定時間(秒、実際の音声生成後に更新されます) + - visualType: "ppt" (固定) + - visualAssetIndex: 1(スライド2)または 2(スライド3) + - highlightArea: "full" (固定) + +2. ナレーションのポイント: + - PDFの具体的な数値を必ず含める(名前、年齢、年収、費用など) + - 親しみやすく温かい語り口 + - 各セグメント30-50秒程度 + - 自然な流れで情報を伝える + - 聞き手が理解しやすいように整理 + +3. セグメント配分例: + 【スライド2(家族情報)】 + - セグメント1: 家族紹介の導入(10-15秒) + - セグメント2: 代表者の詳細(25-35秒) + - セグメント3: 配偶者と子供の詳細(30-40秒) + - セグメント4: 家計サマリー(20-30秒) + + 【スライド3(ライフイベント)】 + - セグメント5: イベント概要の導入(10-15秒) + - セグメント6: 具体的なイベント紹介(35-45秒) + - セグメント7: 将来への展望(20-30秒) + +4. 推定時間の設定: + - 日本語の読み上げ速度: 約300-350文字/分(5-6文字/秒) + - テキストの長さから適切な時間を推定 + +【出力】 +JSON配列のみを返してください。説明文は不要です。 + +例: +[ + {{ + "id": "s2_intro", + "text": "それでは、テスト太郎様のご家族についてご紹介いたします...", + "estimatedDuration": 12, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full" + }}, + ... +] +""" + + response = self.client.models.generate_content( + model="gemini-2.0-flash-exp", + contents=prompt, + config=types.GenerateContentConfig( + temperature=0.8, + response_mime_type="application/json" + ) + ) + + segments = json.loads(response.text) + print(f" ✓ Generated {len(segments)} narration segments") + + # Display preview + print("\n 📝 Script Preview:") + for i, seg in enumerate(segments, 1): + slide_num = seg['visualAssetIndex'] + 1 + print(f"\n {i}. [{seg['id']}] - Slide {slide_num} ({seg.get('estimatedDuration', 0)}s)") + print(f" {seg['text'][:80]}...") + + return segments + + def generate_audio(self, segments: List[Dict]) -> List[Dict]: + """Generate TTS audio using OpenAI""" + sys.path.insert(0, str(self.project_root)) + from backend.audio_generator import AudioGenerator + from backend.video_processor.utils import get_video_duration + + print("\n🎙️ Generating audio with OpenAI TTS...") + + audio_gen = AudioGenerator() + output_dir = self.project_root / "public" / "ppt_intro_audio" + output_dir.mkdir(parents=True, exist_ok=True) + + for i, seg in enumerate(segments, 1): + text = seg["text"] + audio_filename = f"narration_{seg['id']}.mp3" + audio_path = output_dir / audio_filename + + print(f" [{i}/{len(segments)}] {seg['id']}: Generating...") + + try: + response = audio_gen.client.audio.speech.create( + model="tts-1", + voice="nova", + input=text + ) + response.stream_to_file(str(audio_path)) + + actual_duration = get_video_duration(str(audio_path)) + seg["duration"] = actual_duration + seg["audioPath"] = f"public/ppt_intro_audio/{audio_filename}" + print(f" ✓ {actual_duration:.2f}s") + except Exception as e: + print(f" ⚠️ Failed: {e}") + seg["duration"] = seg.get("estimatedDuration", 10) + continue + + total_duration = sum(s.get("duration", 0) for s in segments) + print(f"\n ✓ Generated {len(segments)} audio files ({total_duration:.1f}s total)") + return segments + + def create_render_props(self, segments: List[Dict]) -> Dict: + """Create render_props configuration""" + print("\n📦 Creating render props...") + + # Load existing render_props for charts and assets + props_path = self.project_root / "assets/1_processed/render_props.json" + with open(props_path, encoding="utf-8") as f: + existing_props = json.load(f) + + new_props = { + "meta": { + "title": "ライフプラン紹介 - 家族とイベント", + "currencyUnit": "万円", + "duration": sum(s.get("duration", 0) for s in segments), + "clientName": existing_props["meta"].get("clientName", "お客様") + }, + "charts": existing_props.get("charts", {}), + "script": segments, + "assets": { + "slides": existing_props["assets"]["slides"], + "videoClips": [], + "broll": existing_props["assets"].get("broll", {}) + } + } + + output_path = self.project_root / "assets/1_processed/render_props_ppt_intro.json" + with open(output_path, "w", encoding="utf-8") as f: + json.dump(new_props, f, ensure_ascii=False, indent=2) + + print(f" ✓ Saved to {output_path.name}") + return new_props + + def run(self) -> str: + """Execute full pipeline""" + print("=" * 70) + print("🚀 PPT Introduction Video Generator") + print("=" * 70) + + try: + # Extract PDF info + pdf_info = self.extract_pdf_info() + + # Generate script + segments = self.generate_narration_script(pdf_info) + + # Generate audio + segments = self.generate_audio(segments) + + # Create render props + props = self.create_render_props(segments) + + # Summary + print("\n" + "=" * 70) + print("✅ Generation Complete!") + print("=" * 70) + + output_file = "assets/2_output/ppt_intro_video.mp4" + print(f"\n📹 Render command:") + print(f" npx remotion render MainVideo {output_file} \\") + print(f" --props=\"assets/1_processed/render_props_ppt_intro.json\" --concurrency=1") + + print(f"\n📊 Video Summary:") + print(f" - Target slides: slide_002.png, slide_003.png") + print(f" - Total segments: {len(segments)}") + print(f" - Total duration: {props['meta']['duration']:.1f}s") + print(f" - Client: {props['meta']['clientName']}") + print(f" - Config file: render_props_ppt_intro.json") + + return output_file + + except Exception as e: + print(f"\n❌ Error: {e}") + import traceback + traceback.print_exc() + raise + + +if __name__ == "__main__": + generator = PPTIntroVideoGenerator() + generator.run() diff --git a/backend/generate_ppt_slides_simple.py b/backend/generate_ppt_slides_simple.py new file mode 100644 index 0000000..877a649 --- /dev/null +++ b/backend/generate_ppt_slides_simple.py @@ -0,0 +1,199 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Generate video for PPT slides 2 & 3 using existing data (no API calls needed) +Only display PPT slides, narration includes PDF info +""" + +import os +import json +import sys +from pathlib import Path +from typing import Dict, List + + +class SimplePPTVideoGenerator: + def __init__(self): + self.project_root = Path(__file__).parent.parent + + def create_script_segments(self) -> List[Dict]: + """ + Create narration script for slides 2 and 3 + Based on existing PDF/PPT data + Using existing audio files from family_intro_audio + """ + + # Use existing audio files + segments = [ + { + "id": "slide2_intro", + "text": "それでは、テスト太郎様のご家族についてご紹介いたします。こちらのスライドをご覧ください。", + "duration": 8.976, + "visualType": "ppt", + "visualAssetIndex": 1, # slide_002.png + "highlightArea": "full", + "audioPath": "public/family_intro_audio/narration_intro01.mp3" + }, + { + "id": "slide2_family_overview", + "text": "今回ご紹介するのは、テスト太郎さん、花子さん、そして7歳になる息子さんの3人家族です。太郎さんは情報通信業にお勤めで、年収は703万円。花子さんは卸売・小売業で、年収は368万円です。素敵なご家族ですね。", + "duration": 19.248, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full", + "audioPath": "public/family_intro_audio/narration_family01.mp3" + }, + { + "id": "slide2_child_info", + "text": "それでは、ご家族の詳細を見ていきましょう。まず、お父様のテスト太郎さんは、1980年1月1日生まれの47歳。情報通信業でご活躍されています。", + "duration": 30.264, + "visualType": "ppt", + "visualAssetIndex": 1, + "highlightArea": "full", + "audioPath": "public/family_intro_audio/narration_details01.mp3" + }, + { + "id": "slide3_transition", + "text": "テストさんご一家の世帯年収は1071万円。将来の夢に向かって、素晴らしいライフプランを描いていきましょう。", + "duration": 9.528, + "visualType": "ppt", + "visualAssetIndex": 2, # slide_003.png + "highlightArea": "full", + "audioPath": "public/family_intro_audio/narration_summary01.mp3" + } + ] + + print(f"✓ Created {len(segments)} script segments (using existing audio)") + print("\n📝 Script Preview:") + for i, seg in enumerate(segments, 1): + print(f"\n{i}. [{seg['id']}] - Slide {seg['visualAssetIndex'] + 1}") + print(f" Duration: {seg['duration']}s") + print(f" Audio: {seg['audioPath']}") + print(f" Text: {seg['text'][:60]}...") + + return segments + + def generate_audio(self, segments: List[Dict]) -> List[Dict]: + """Generate TTS audio for each segment""" + sys.path.insert(0, str(self.project_root)) + + print("\n🎙️ Checking audio generation capability...") + + # Check if API key is available + if not os.getenv("OPENAI_API_KEY"): + print(" ⚠️ OPENAI_API_KEY not found - skipping audio generation") + print(" 📝 Using preset durations for video segments") + return segments + + try: + from backend.audio_generator import AudioGenerator + from backend.video_processor.utils import get_video_duration + except ImportError as e: + print(f" ⚠️ Import error: {e}") + print(" 📝 Using preset durations without audio generation") + return segments + + print("🎙️ Generating audio...") + + try: + audio_gen = AudioGenerator() + except ValueError as e: + print(f" ⚠️ {e}") + print(" 📝 Using preset durations for video segments") + return segments + + output_dir = self.project_root / "public" / "ppt_slides_audio" + output_dir.mkdir(parents=True, exist_ok=True) + + for i, seg in enumerate(segments): + text = seg["text"] + audio_filename = f"narration_{seg['id']}.mp3" + audio_path = output_dir / audio_filename + + print(f" [{i+1}/{len(segments)}] {seg['id']}: Generating audio...") + + try: + response = audio_gen.client.audio.speech.create( + model="tts-1", + voice="nova", + input=text + ) + response.stream_to_file(str(audio_path)) + + actual_duration = get_video_duration(str(audio_path)) + seg["duration"] = actual_duration + seg["audioPath"] = f"public/ppt_slides_audio/{audio_filename}" + print(f" ✓ Duration: {actual_duration:.2f}s") + except Exception as e: + print(f" ⚠️ Audio generation failed: {e}") + print(f" Using preset duration: {seg['duration']}s") + continue + + total_duration = sum(s.get("duration", 0) for s in segments) + print(f"\n✓ Audio processing complete (Total: {total_duration:.1f}s)") + return segments + + def create_render_props(self, segments: List[Dict]) -> Dict: + """Create render_props with only PPT slides""" + + # Load existing render_props to get charts and assets + props_path = self.project_root / "assets/1_processed/render_props.json" + with open(props_path, encoding="utf-8") as f: + existing_props = json.load(f) + + new_props = { + "meta": { + "title": "テスト太郎様 ライフプラン紹介", + "currencyUnit": "万円", + "duration": sum(s.get("duration", 0) for s in segments), + "clientName": "テスト太郎" + }, + "charts": existing_props.get("charts", {}), + "script": segments, + "assets": { + "slides": existing_props["assets"]["slides"], + "videoClips": [], + "broll": existing_props["assets"].get("broll", {}) + } + } + + output_path = self.project_root / "assets/1_processed/render_props_ppt_slides.json" + with open(output_path, "w", encoding="utf-8") as f: + json.dump(new_props, f, ensure_ascii=False, indent=2) + + print(f"\n✓ Saved render props to {output_path.name}") + return new_props + + def run(self) -> str: + """Execute full pipeline""" + print("🚀 Generating video for PPT slides 2 & 3...\n") + + # Create script segments + segments = self.create_script_segments() + print() + + # Generate audio + segments = self.generate_audio(segments) + print() + + # Create render props + props = self.create_render_props(segments) + print() + + output_file = "assets/2_output/ppt_slides_video.mp4" + print(f"✅ Pipeline complete!") + print(f"\n📹 Render command:") + print(f" npx remotion render MainVideo {output_file} --props=\"assets/1_processed/render_props_ppt_slides.json\" --concurrency=1") + print() + print(f"📊 Video Summary:") + print(f" - Target slides: slide_002.png, slide_003.png") + print(f" - Total segments: {len(segments)}") + print(f" - Total duration: {props['meta']['duration']:.1f}s") + print(f" - Client: {props['meta']['clientName']}") + + return output_file + + +if __name__ == "__main__": + generator = SimplePPTVideoGenerator() + generator.run() diff --git a/backend/generate_ppt_slides_video.py b/backend/generate_ppt_slides_video.py new file mode 100644 index 0000000..1867d87 --- /dev/null +++ b/backend/generate_ppt_slides_video.py @@ -0,0 +1,350 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Generate video for specific PPT slides (slides 2 & 3) +Extract information from PDF but only display PPT slides +""" + +import os +import json +import sys +from pathlib import Path +from typing import Dict, List +from dotenv import load_dotenv +from google import genai +from google.genai import types + +# Load environment +load_dotenv() + + +class PPTSlidesVideoGenerator: + def __init__(self, slide_indices: List[int] = [1, 2]): + """ + Initialize generator for specific PPT slides + + Args: + slide_indices: List of slide indices to generate video for (0-based) + Default: [1, 2] means slide 2 and slide 3 (slide_002.png, slide_003.png) + """ + self.project_root = Path(__file__).parent.parent + self.slide_indices = slide_indices + + # Initialize Gemini client + api_key = os.getenv("GEMINI_API_KEY") + if not api_key: + raise ValueError("GEMINI_API_KEY not found in environment") + self.client = genai.Client(api_key=api_key) + + def load_materials(self) -> Dict: + """Load PPT slides and PDF data""" + print("📦 Loading materials...") + + # Load existing render_props to get PPT slides info + props_path = self.project_root / "assets/1_processed/render_props.json" + with open(props_path, encoding="utf-8") as f: + props_data = json.load(f) + + all_slides = props_data["assets"]["slides"] + target_slides = [slide for slide in all_slides if slide["index"] in self.slide_indices] + + print(f"✓ Loaded {len(target_slides)} PPT slides (indices: {self.slide_indices})") + + # Extract PDF data using Gemini + pdf_data = self.extract_pdf_data() + + return { + "ppt_slides": target_slides, + "pdf_data": pdf_data, + "existing_props": props_data + } + + def extract_pdf_data(self) -> Dict: + """Extract relevant data from PDF using Gemini""" + print("📄 Extracting data from PDF...") + + pdf_path = self.project_root / "assets/0_input/帳票(お客様向け).pdf" + + # Upload PDF to Gemini + with open(pdf_path, 'rb') as f: + upload_config = types.UploadFileConfig(mime_type='application/pdf') + pdf_file = self.client.files.upload(file=f, config=upload_config) + + # Wait for processing + import time + while pdf_file.state == "PROCESSING": + print(" ⏳ Processing PDF...") + time.sleep(2) + pdf_file = self.client.files.get(name=pdf_file.name) + + if pdf_file.state == "FAILED": + raise RuntimeError(f"PDF processing failed: {pdf_file.error}") + + print(" ✓ PDF uploaded successfully") + + # Extraction prompt + prompt = """ +このPDFからライフプラン情報を詳細に抽出してください。 + +以下のJSON形式で出力してください: + +{ + "client_info": { + "name": "クライアント名", + "birth_date": "生年月日", + "age": 年齢, + "occupation": "業種", + "annual_income": 年収(万円) + }, + "spouse_info": { + "name": "配偶者名", + "birth_date": "生年月日", + "age": 年齢, + "occupation": "業種", + "annual_income": 年収(万円) + }, + "children": [ + { + "name": "子供の名前", + "birth_date": "生年月日", + "age": 年齢, + "education_plan": "教育プラン(保育園→小学校→中学校など)" + } + ], + "financial_summary": { + "household_income": 世帯年収(万円), + "annual_expenses": 年間支出(万円), + "current_assets": 現在資産(万円), + "savings": 貯蓄額(万円) + }, + "life_events": [ + { + "year": イベント発生年, + "age": その時の年齢, + "description": "イベント説明", + "cost": 費用(万円) + } + ], + "future_projections": { + "retirement_age": 退職年齢, + "life_expectancy": 想定寿命, + "retirement_savings_needed": 必要な老後資金(万円) + } +} + +可能な限り詳細な情報を抽出してください。数値は必ず含めてください。 +""" + + response = self.client.models.generate_content( + model="gemini-2.0-flash", + contents=[pdf_file, prompt], + config=types.GenerateContentConfig( + temperature=0.1, + response_mime_type="application/json" + ) + ) + + pdf_data = json.loads(response.text) + print("✓ PDF data extracted successfully") + return pdf_data + + def generate_script(self, materials: Dict) -> List[Dict]: + """Generate narration script for PPT slides based on PDF data""" + print("🤖 Generating narration script...") + + ppt_slides = materials["ppt_slides"] + pdf_data = materials["pdf_data"] + + # Handle case where pdf_data might be a list or dict + if isinstance(pdf_data, list): + pdf_data = pdf_data[0] if pdf_data else {} + + # Build detailed context from PDF + client_info = pdf_data.get("client_info", {}) + spouse_info = pdf_data.get("spouse_info", {}) + children = pdf_data.get("children", []) + financial = pdf_data.get("financial_summary", {}) + life_events = pdf_data.get("life_events", []) + + prompt = f""" +あなたはプロのファイナンシャルプランナーであり、動画ナレーターです。 + +【重要】以下の2枚のPPTスライドについて、PDFから抽出した詳細情報を使って、 +豊富で魅力的なナレーション原稿を作成してください。 + +【利用可能なPPTスライド】 +スライド1 (slide_002.png): インデックス={ppt_slides[0]["index"]} +スライド2 (slide_003.png): インデックス={ppt_slides[1]["index"] if len(ppt_slides) > 1 else "N/A"} + +【PDFから抽出した詳細情報】 +■ クライアント情報: +{json.dumps(client_info, ensure_ascii=False, indent=2)} + +■ 配偶者情報: +{json.dumps(spouse_info, ensure_ascii=False, indent=2)} + +■ 子供情報: +{json.dumps(children, ensure_ascii=False, indent=2)} + +■ 財務サマリー: +{json.dumps(financial, ensure_ascii=False, indent=2)} + +■ ライフイベント (最初の5件): +{json.dumps(life_events[:5], ensure_ascii=False, indent=2)} + +【要件】 +1. **2枚のPPTスライドのみを使用**してください + - スライド1枚あたり2-4個のセグメントを作成 + - 合計で4-6個のセグメントを生成 + +2. 各セグメントの構造: + - id: セグメントID (例: "slide2_intro", "slide2_family", "slide3_events") + - text: ナレーション文 (30-60秒分の自然な日本語、具体的な数値を多く含む) + - duration: 推定時間(秒、実際の音声生成後に更新されます) + - visualType: "ppt" (固定) + - visualAssetIndex: PPTスライドのインデックス (0始まり) + - highlightArea: "full" (固定) + +3. **ナレーション作成のポイント**: + - PDFから抽出した具体的な数値を必ず使用(名前、年齢、生年月日、年収、業種など) + - 温かみのある親しみやすい語り口 + - 視聴者が理解しやすいように、情報を整理して伝える + - 各セグメント30-60秒程度の適切な長さ + - 同じスライドを連続して使用しても良い(内容が異なれば) + +4. **セグメント例**: + - スライド2の前半: 家族構成の紹介 + - スライド2の後半: 各メンバーの詳細(年齢、職業、年収など) + - スライド3の前半: ライフイベントの概要 + - スライド3の後半: 具体的なイベントと費用 + +**出力形式**: JSON配列のみを返してください。 +""" + + response = self.client.models.generate_content( + model="gemini-2.0-flash", + contents=prompt, + config=types.GenerateContentConfig( + temperature=0.7, + response_mime_type="application/json" + ) + ) + + segments = json.loads(response.text) + print(f"✓ Generated {len(segments)} script segments") + + # Display preview + print("\n📝 Script Preview:") + for i, seg in enumerate(segments, 1): + print(f"\n{i}. [{seg['id']}] - Slide {seg['visualAssetIndex'] + 1}") + print(f" Text: {seg['text'][:100]}...") + + return segments + + def generate_audio(self, segments: List[Dict]) -> List[Dict]: + """Generate TTS audio for each segment""" + sys.path.insert(0, str(self.project_root)) + from backend.audio_generator import AudioGenerator + from backend.video_processor.utils import get_video_duration + + print("\n🎙️ Generating audio...") + + audio_gen = AudioGenerator() + output_dir = self.project_root / "public" / "ppt_slides_audio" + output_dir.mkdir(parents=True, exist_ok=True) + + for i, seg in enumerate(segments): + text = seg["text"] + audio_filename = f"narration_{seg['id']}.mp3" + audio_path = output_dir / audio_filename + + print(f" [{i+1}/{len(segments)}] {seg['id']}: Generating audio...") + + try: + response = audio_gen.client.audio.speech.create( + model="tts-1", + voice="nova", + input=text + ) + response.stream_to_file(str(audio_path)) + + actual_duration = get_video_duration(str(audio_path)) + seg["duration"] = actual_duration + seg["audioPath"] = f"public/ppt_slides_audio/{audio_filename}" + print(f" ✓ Duration: {actual_duration:.2f}s") + except Exception as e: + print(f" ⚠️ Failed: {e}") + seg["duration"] = 5.0 # Fallback duration + continue + + total_duration = sum(s.get("duration", 0) for s in segments) + print(f"\n✓ Generated {len(segments)} audio files (Total: {total_duration:.1f}s)") + return segments + + def create_render_props(self, segments: List[Dict], materials: Dict) -> Dict: + """Create render_props with only PPT slides""" + + existing_props = materials["existing_props"] + + new_props = { + "meta": { + "title": f"ライフプラン紹介 - スライド{self.slide_indices[0]+1}・{self.slide_indices[1]+1 if len(self.slide_indices) > 1 else ''}", + "currencyUnit": "万円", + "duration": sum(s.get("duration", 0) for s in segments), + "clientName": materials["pdf_data"].get("client_info", {}).get("name", "お客様") + }, + "charts": existing_props.get("charts", {}), + "script": segments, + "assets": { + "slides": existing_props["assets"]["slides"], # Keep all slides + "videoClips": [], + "broll": existing_props["assets"].get("broll", {}) + } + } + + output_path = self.project_root / "assets/1_processed/render_props_ppt_slides.json" + with open(output_path, "w", encoding="utf-8") as f: + json.dump(new_props, f, ensure_ascii=False, indent=2) + + print(f"\n✓ Saved render props to {output_path.name}") + return new_props + + def run(self) -> str: + """Execute full pipeline""" + print(f"🚀 Generating video for PPT slides {[i+1 for i in self.slide_indices]}...\n") + + # Load materials + materials = self.load_materials() + print() + + # Generate script + segments = self.generate_script(materials) + print() + + # Generate audio + segments = self.generate_audio(segments) + print() + + # Create render props + props = self.create_render_props(segments, materials) + print() + + output_file = "assets/2_output/ppt_slides_video.mp4" + print(f"✅ Pipeline complete!") + print(f"\n📹 Render command:") + print(f" npx remotion render MainVideo {output_file} \\") + print(f" --props=\"assets/1_processed/render_props_ppt_slides.json\" --concurrency=1") + print() + print(f"📊 Video Summary:") + print(f" - Target slides: {[f'slide_{i+1:03d}.png' for i in self.slide_indices]}") + print(f" - Total segments: {len(segments)}") + print(f" - Total duration: {props['meta']['duration']:.1f}s") + print(f" - Client: {props['meta']['clientName']}") + + return output_file + + +if __name__ == "__main__": + # Generate video for slides 2 and 3 (indices 1 and 2) + generator = PPTSlidesVideoGenerator(slide_indices=[1, 2]) + generator.run() diff --git a/backend/rebuild_audio.py b/backend/rebuild_audio.py index bf2677c..2139060 100644 --- a/backend/rebuild_audio.py +++ b/backend/rebuild_audio.py @@ -53,7 +53,7 @@ def rebuild_audio_from_props(): # Generate new audio files (outputs to public/ folder) print("🎙️ Generating new audio files...") - updated_script_data = generate_audio_for_script(script_data, voice="fable") + updated_script_data = generate_audio_for_script(script_data, voice="nova") # voice options: "alloy", "echo", "fable", "onyx", "nova", "shimmer" # Update the script in our props object diff --git a/backend/regenerate_missing_audio.py b/backend/regenerate_missing_audio.py new file mode 100644 index 0000000..23ed72b --- /dev/null +++ b/backend/regenerate_missing_audio.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Regenerate missing audio files for PPT intro video +Only regenerates audio for segments that failed previously +""" + +import os +import json +import sys +from pathlib import Path +from dotenv import load_dotenv + +load_dotenv() + + +def regenerate_missing_audio(): + """Regenerate audio for segments that are missing audioPath""" + project_root = Path(__file__).parent.parent + + # Load the render props + props_path = project_root / "assets/1_processed/render_props_ppt_intro_final.json" + with open(props_path, encoding="utf-8") as f: + props_data = json.load(f) + + segments = props_data["script"] + + # Find segments without audioPath + missing_segments = [] + for seg in segments: + if "audioPath" not in seg or not seg["audioPath"]: + missing_segments.append(seg) + + if not missing_segments: + print("✓ All segments already have audio files!") + return + + print(f"🔍 Found {len(missing_segments)} segments without audio") + + # Import audio generator + sys.path.insert(0, str(project_root)) + from backend.audio_generator import AudioGenerator + from backend.video_processor.utils import get_video_duration + + audio_gen = AudioGenerator() + output_dir = project_root / "public" / "ppt_intro_final_audio" + output_dir.mkdir(parents=True, exist_ok=True) + + # Regenerate audio + print("\n🎙️ Generating missing audio files...") + + for i, seg in enumerate(missing_segments, 1): + text = seg["text"] + audio_filename = f"narration_{seg['id']}.mp3" + audio_path = output_dir / audio_filename + + print(f"\n[{i}/{len(missing_segments)}] {seg['id']}") + print(f" Text: {text[:60]}...") + print(f" Generating audio...") + + try: + response = audio_gen.client.audio.speech.create( + model="tts-1", + voice="nova", + input=text + ) + response.stream_to_file(str(audio_path)) + + actual_duration = get_video_duration(str(audio_path)) + seg["duration"] = actual_duration + seg["audioPath"] = f"public/ppt_intro_final_audio/{audio_filename}" + print(f" ✓ Generated: {actual_duration:.2f}s") + except Exception as e: + print(f" ⚠️ Failed: {e}") + seg["duration"] = seg.get("estimatedDuration", 10) + continue + + # Update duration in props + props_data["meta"]["duration"] = sum(s.get("duration", 0) for s in segments) + + # Save updated props + with open(props_path, "w", encoding="utf-8") as f: + json.dump(props_data, f, ensure_ascii=False, indent=2) + + print(f"\n✅ Regeneration complete!") + print(f" Total duration: {props_data['meta']['duration']:.1f}s") + print(f"\n📹 Ready to render:") + print(f" npx remotion render MainVideo assets/2_output/ppt_intro_final_video.mp4 \\") + print(f" --props=\"assets/1_processed/render_props_ppt_intro_final.json\" --concurrency=1") + + +if __name__ == "__main__": + try: + regenerate_missing_audio() + except Exception as e: + print(f"\n❌ Error: {e}") + import traceback + traceback.print_exc() diff --git a/backend/scripter.py b/backend/scripter.py index 9295654..1cc3146 100644 --- a/backend/scripter.py +++ b/backend/scripter.py @@ -118,9 +118,17 @@ class ScriptGenerator: for i, clip in enumerate(clips): video_info += f"- クリップ {i}: 「{clip.get('text', '')[:100]}...」\n" + # Advice info + advice_info = "" + advice_list = pdf_data.get("advice", []) + if advice_list: + advice_info = "\n【具体的なアドバイス内容】\n" + for adv in advice_list: + advice_info += f"- {adv}\n" + prompt = f""" あなたはプロのファイナンシャルプランナーであり、親しみやすい動画解説者です。 -以下の顧客情報、ライフイベント、PPTスライド、そしてインタビュー動画の転記内容に基づいて、解説動画用の完結なナレーション原稿を作成してください。 +以下の顧客情報、ライフイベント、PPTスライド、具体的なアドバイス、そしてインタビュー動画の転記内容に基づいて、解説動画用の完結なナレーション原稿を作成してください。 【厳格な指示】 1. 抽象的な表現(「〇〇」や「△△」)や、メタ発言(「スライドの内容がありません」など)は絶対に出力しないでください。 @@ -146,6 +154,7 @@ class ScriptGenerator: - 年間支出: {annual_expenses}万円 {events_info} {ppt_info} +{advice_info} {video_info} 【原稿構成のフロー】 @@ -156,8 +165,9 @@ class ScriptGenerator: 3. ライフイベント(Slide 3, 4...):具体的なイベント内容の解説。 4. インタビュー挿入(Video):本人の想いや不安、决意を语るシーン。 5. シミュレーション詳細(Chart):動的なグラフ(資産推移・収支明細)を使い、何年後に資産がどうなるかを具体的に説明。 -6. 対策とアドバイス(Slide 5, 6...):改善策や提案をスライドで。 -7. クロージング(Slide 7...):まとめと個別相談の案内。 +6. 対策とアドバイス(Slide 5, 6...):【具体的なアドバイス内容】を最大限に活用し、顧客の状況に合わせた具体的な改善策(保険の見直し、投資の検討、支出の最適化など)を 2〜3 セグメントかけて丁寧に説明してください。 + - **重要**: アドバイスセグメントでは、**`visualType` を必ず `ppt`** に設定し、**`visualAssetIndex` を `5`**(本件PPTの倒数2枚目:改善策スライド)に固定して表示し続けてください。決して一言で終わらせないでください。 +7. クロージング(Slide 7...):まとめと個別相談の案内。`visualAssetIndex` を `6`(最後のスライド)に設定してください。 【素材使用の鉄則 - 必ず守ること】 - **PPTスライドの全消化**: 提供されたスライド(Slide 0 から最後のリファレンスまで)を、内容に合わせて**必ず全て最低1回は表示**してください。スライドを飛ばさないでください。 diff --git a/backend/simplify_intro.py b/backend/simplify_intro.py new file mode 100644 index 0000000..287fdad --- /dev/null +++ b/backend/simplify_intro.py @@ -0,0 +1,67 @@ +import json +from pathlib import Path + +def simplify_intro(): + props_path = Path("assets/1_processed/render_props.json") + if not props_path.exists(): + print("Error: render_props.json not found") + return + + with open(props_path, "r", encoding="utf-8") as f: + props = json.load(f) + + script = props.get("script", []) + if len(script) < 6: + print("Script too short to simplify") + return + + # Combined FP Segment (ID 1) + # Merging content from original 1, 3, 5 + fp_text = "お客様のライフプランを提供するために、お名前と生年月日などの基本情報を教えていただけますでしょうか。" + fp_segment = { + "id": 1, + "text": fp_text, + "insight": "基本情報のヒアリング", + "targetYear": 2024, + "duration": 6.5, # Estimated, rebuild_audio will fix it + "type": "dialogue", + "visualType": "dialogue", + "speaker": "FP", + "brollKeyword": "Japanese financial advisor consulting client", + "audioPath": "public/segment_001.mp3" + } + + # Combined Client Segment (ID 2) + # Merging content from original 2, 4, 6 + client_text = "はい、テスト太郎です。1980年1月1日生まれの47歳です。" + client_segment = { + "id": 2, + "text": client_text, + "insight": "自己紹介と基本情報", + "targetYear": 2024, + "duration": 8.0, # Estimated + "type": "dialogue", + "visualType": "dialogue", + "speaker": "家族代表様", + "brollKeyword": "Japanese man introduced himself", + "audioPath": "public/segment_002.mp3" # Will use TTS for this combined one for now + } + + # New script starts with these two + new_script = [fp_segment, client_segment] + + # Append the rest (starting from original index 6, which is ID 7) + for i, seg in enumerate(script[6:]): + seg["id"] = i + 3 + # We'll let rebuild_audio fix the paths and durations + new_script.append(seg) + + props["script"] = new_script + + with open(props_path, "w", encoding="utf-8") as f: + json.dump(props, f, ensure_ascii=False, indent=2) + + print("Successfully simplified intro dialogue in render_props.json") + +if __name__ == "__main__": + simplify_intro() diff --git a/main.py b/main.py index 82b28c2..d130f4b 100644 --- a/main.py +++ b/main.py @@ -102,7 +102,16 @@ class VideoGeneratorPipeline: # Step 3: Generate narration script print("\n✍️ Step 3/6: Generating narration script...") - script = self.generate_script(pdf_data, ppt_data, video_data) + props_file = self.processed_dir / "render_props.json" + + # FEATURE: Use existing script if skip_script is enabled to preserve manual edits + if self.config.get("skip_script") and props_file.exists(): + print(f" ♻️ PRESERVING existing script from {props_file.name}") + with open(props_file, "r", encoding="utf-8") as f: + existing_props = json.load(f) + script = {"segments": existing_props.get("script", [])} + else: + script = self.generate_script(pdf_data, ppt_data, video_data) # Step 3.5: Generate audio from script (NEW) print("\n🎙️ Step 3.5/6: Generating audio narration...") @@ -258,7 +267,9 @@ class VideoGeneratorPipeline: # 1. Extract keywords explicitly requested in script segments keywords = set() for segment in script.get("segments", []): - if segment.get("visualType") == "broll" and segment.get("brollKeyword"): + # ENHANCED: Collect keywords from ANY segment that has one, + # as our 3-column layout can show B-Roll alongside PPT/Charts + if segment.get("brollKeyword"): keywords.add(segment.get("brollKeyword")) # 2. Add keywords from video data as fallback/supplement @@ -425,6 +436,12 @@ Examples: help="Extract video clips from source video (optional)", ) + parser.add_argument( + "--skip-script", + action="store_true", + help="Skip AI script generation and use existing script from render_props.json (preserves manual edits)", + ) + args = parser.parse_args() # Build configuration @@ -444,6 +461,7 @@ Examples: config["dry_run"] = args.dry_run config["extract_clips"] = args.extract_clips + config["skip_script"] = args.skip_script # Run pipeline pipeline = VideoGeneratorPipeline(config) diff --git a/public/broll/Advisor Inquiring_7844849.mp4 b/public/broll/Advisor Inquiring_7844849.mp4 new file mode 100644 index 0000000..59efdc7 Binary files /dev/null and b/public/broll/Advisor Inquiring_7844849.mp4 differ diff --git a/public/broll/Asian Woman Reviewing Insurance Policy_7732821.mp4 b/public/broll/Asian Woman Reviewing Insurance Policy_7732821.mp4 new file mode 100644 index 0000000..5661bb4 Binary files /dev/null and b/public/broll/Asian Woman Reviewing Insurance Policy_7732821.mp4 differ diff --git a/public/broll/Asian Woman Tracking Expenses_7958453.mp4 b/public/broll/Asian Woman Tracking Expenses_7958453.mp4 new file mode 100644 index 0000000..f5fa687 Binary files /dev/null and b/public/broll/Asian Woman Tracking Expenses_7958453.mp4 differ diff --git a/public/broll/Budgeting Couple_6962712.mp4 b/public/broll/Budgeting Couple_6962712.mp4 new file mode 100644 index 0000000..dede79d Binary files /dev/null and b/public/broll/Budgeting Couple_6962712.mp4 differ diff --git a/public/broll/Budgeting Couple_7958685.mp4 b/public/broll/Budgeting Couple_7958685.mp4 new file mode 100644 index 0000000..868b5c7 Binary files /dev/null and b/public/broll/Budgeting Couple_7958685.mp4 differ diff --git a/public/broll/Business Consultation_7844849.mp4 b/public/broll/Business Consultation_7844849.mp4 new file mode 100644 index 0000000..59efdc7 Binary files /dev/null and b/public/broll/Business Consultation_7844849.mp4 differ diff --git a/public/broll/Car Shopping_31980658.mp4 b/public/broll/Car Shopping_31980658.mp4 new file mode 100644 index 0000000..a0511fc Binary files /dev/null and b/public/broll/Car Shopping_31980658.mp4 differ diff --git a/public/broll/Chart Explanation_6285682.mp4 b/public/broll/Chart Explanation_6285682.mp4 new file mode 100644 index 0000000..3284ffb Binary files /dev/null and b/public/broll/Chart Explanation_6285682.mp4 differ diff --git a/public/broll/Client Consulting_4486777.mp4 b/public/broll/Client Consulting_4486777.mp4 new file mode 100644 index 0000000..8939a11 Binary files /dev/null and b/public/broll/Client Consulting_4486777.mp4 differ diff --git a/public/broll/Client Consulting_8440335.mp4 b/public/broll/Client Consulting_8440335.mp4 new file mode 100644 index 0000000..7e7c5a2 Binary files /dev/null and b/public/broll/Client Consulting_8440335.mp4 differ diff --git a/public/broll/Consultant Pointing_4824286.mp4 b/public/broll/Consultant Pointing_4824286.mp4 new file mode 100644 index 0000000..9c459c1 Binary files /dev/null and b/public/broll/Consultant Pointing_4824286.mp4 differ diff --git a/public/broll/Consultant Pointing_7844849.mp4 b/public/broll/Consultant Pointing_7844849.mp4 new file mode 100644 index 0000000..59efdc7 Binary files /dev/null and b/public/broll/Consultant Pointing_7844849.mp4 differ diff --git a/public/broll/Education Discussion_8808486.mp4 b/public/broll/Education Discussion_8808486.mp4 new file mode 100644 index 0000000..fb2971e Binary files /dev/null and b/public/broll/Education Discussion_8808486.mp4 differ diff --git a/public/broll/Expense Tracking_31319187.mp4 b/public/broll/Expense Tracking_31319187.mp4 new file mode 100644 index 0000000..9ccc400 Binary files /dev/null and b/public/broll/Expense Tracking_31319187.mp4 differ diff --git a/public/broll/Expressing Feelings_7956620.mp4 b/public/broll/Expressing Feelings_7956620.mp4 new file mode 100644 index 0000000..adb0847 Binary files /dev/null and b/public/broll/Expressing Feelings_7956620.mp4 differ diff --git a/public/broll/Expressing Feelings_7957918.mp4 b/public/broll/Expressing Feelings_7957918.mp4 new file mode 100644 index 0000000..f1aa4f9 Binary files /dev/null and b/public/broll/Expressing Feelings_7957918.mp4 differ diff --git a/public/broll/Family Finances_7415942.mp4 b/public/broll/Family Finances_7415942.mp4 new file mode 100644 index 0000000..2865c72 Binary files /dev/null and b/public/broll/Family Finances_7415942.mp4 differ diff --git a/public/broll/Family Gathering_5856567.mp4 b/public/broll/Family Gathering_5856567.mp4 new file mode 100644 index 0000000..16a9385 Binary files /dev/null and b/public/broll/Family Gathering_5856567.mp4 differ diff --git a/public/broll/Family Gathering_7415950.mp4 b/public/broll/Family Gathering_7415950.mp4 new file mode 100644 index 0000000..8b706b9 Binary files /dev/null and b/public/broll/Family Gathering_7415950.mp4 differ diff --git a/public/broll/Family_7415942.mp4 b/public/broll/Family_7415942.mp4 new file mode 100644 index 0000000..2865c72 Binary files /dev/null and b/public/broll/Family_7415942.mp4 differ diff --git a/public/broll/Financial Worries_6963635.mp4 b/public/broll/Financial Worries_6963635.mp4 new file mode 100644 index 0000000..2c192ad Binary files /dev/null and b/public/broll/Financial Worries_6963635.mp4 differ diff --git a/public/broll/Giving Birthday_5529618.mp4 b/public/broll/Giving Birthday_5529618.mp4 new file mode 100644 index 0000000..0dff025 Binary files /dev/null and b/public/broll/Giving Birthday_5529618.mp4 differ diff --git a/public/broll/Giving Birthday_6299080.mp4 b/public/broll/Giving Birthday_6299080.mp4 new file mode 100644 index 0000000..45c9176 Binary files /dev/null and b/public/broll/Giving Birthday_6299080.mp4 differ diff --git a/public/broll/Insurance Discussion_7732822.mp4 b/public/broll/Insurance Discussion_7732822.mp4 new file mode 100644 index 0000000..076abcc Binary files /dev/null and b/public/broll/Insurance Discussion_7732822.mp4 differ diff --git a/public/broll/Interview Talking_4428754.mp4 b/public/broll/Interview Talking_4428754.mp4 new file mode 100644 index 0000000..174ebcb Binary files /dev/null and b/public/broll/Interview Talking_4428754.mp4 differ diff --git a/public/broll/Interview Talking_5442623.mp4 b/public/broll/Interview Talking_5442623.mp4 new file mode 100644 index 0000000..700f70c Binary files /dev/null and b/public/broll/Interview Talking_5442623.mp4 differ diff --git a/public/broll/Investment Analysis_5562047.mp4 b/public/broll/Investment Analysis_5562047.mp4 new file mode 100644 index 0000000..7fb40a9 Binary files /dev/null and b/public/broll/Investment Analysis_5562047.mp4 differ diff --git a/public/broll/Japanese Businessman Investing Online_7844849.mp4 b/public/broll/Japanese Businessman Investing Online_7844849.mp4 new file mode 100644 index 0000000..59efdc7 Binary files /dev/null and b/public/broll/Japanese Businessman Investing Online_7844849.mp4 differ diff --git a/public/broll/Marked Calendar_9057559.mp4 b/public/broll/Marked Calendar_9057559.mp4 new file mode 100644 index 0000000..f92a8b0 Binary files /dev/null and b/public/broll/Marked Calendar_9057559.mp4 differ diff --git a/public/broll/Nodding In Agreement_4586579.mp4 b/public/broll/Nodding In Agreement_4586579.mp4 new file mode 100644 index 0000000..61a9770 Binary files /dev/null and b/public/broll/Nodding In Agreement_4586579.mp4 differ diff --git a/public/broll/Nodding In Agreement_6685046.mp4 b/public/broll/Nodding In Agreement_6685046.mp4 new file mode 100644 index 0000000..8c2afeb Binary files /dev/null and b/public/broll/Nodding In Agreement_6685046.mp4 differ diff --git a/public/broll/Polite Bowing_6765344.mp4 b/public/broll/Polite Bowing_6765344.mp4 new file mode 100644 index 0000000..7777b89 Binary files /dev/null and b/public/broll/Polite Bowing_6765344.mp4 differ diff --git a/public/broll/Polite Bowing_7958678.mp4 b/public/broll/Polite Bowing_7958678.mp4 new file mode 100644 index 0000000..25694e3 Binary files /dev/null and b/public/broll/Polite Bowing_7958678.mp4 differ diff --git a/public/broll/Retirement Enjoyment_7329851.mp4 b/public/broll/Retirement Enjoyment_7329851.mp4 new file mode 100644 index 0000000..6ac88c5 Binary files /dev/null and b/public/broll/Retirement Enjoyment_7329851.mp4 differ diff --git a/public/broll/Self-Introduction_6773764.mp4 b/public/broll/Self-Introduction_6773764.mp4 new file mode 100644 index 0000000..bbc095f Binary files /dev/null and b/public/broll/Self-Introduction_6773764.mp4 differ diff --git a/public/broll/Self-Introduction_7956621.mp4 b/public/broll/Self-Introduction_7956621.mp4 new file mode 100644 index 0000000..fc8d75d Binary files /dev/null and b/public/broll/Self-Introduction_7956621.mp4 differ diff --git a/public/broll/Self-Introduction_7958453.mp4 b/public/broll/Self-Introduction_7958453.mp4 new file mode 100644 index 0000000..f5fa687 Binary files /dev/null and b/public/broll/Self-Introduction_7958453.mp4 differ diff --git a/public/broll/Showing Graphs_7844858.mp4 b/public/broll/Showing Graphs_7844858.mp4 new file mode 100644 index 0000000..9088864 Binary files /dev/null and b/public/broll/Showing Graphs_7844858.mp4 differ diff --git a/public/broll/Smiling Business Team_8519375.mp4 b/public/broll/Smiling Business Team_8519375.mp4 new file mode 100644 index 0000000..3529b51 Binary files /dev/null and b/public/broll/Smiling Business Team_8519375.mp4 differ diff --git a/public/broll/Smiling Businessman_7845250.mp4 b/public/broll/Smiling Businessman_7845250.mp4 new file mode 100644 index 0000000..dcacab3 Binary files /dev/null and b/public/broll/Smiling Businessman_7845250.mp4 differ diff --git a/public/broll/Smiling Retirees_6761158.mp4 b/public/broll/Smiling Retirees_6761158.mp4 new file mode 100644 index 0000000..5e38021 Binary files /dev/null and b/public/broll/Smiling Retirees_6761158.mp4 differ diff --git a/public/broll/Studying Hard_2086113.mp4 b/public/broll/Studying Hard_2086113.mp4 new file mode 100644 index 0000000..e79b171 Binary files /dev/null and b/public/broll/Studying Hard_2086113.mp4 differ diff --git a/public/broll/Studying Hard_7958453.mp4 b/public/broll/Studying Hard_7958453.mp4 new file mode 100644 index 0000000..f5fa687 Binary files /dev/null and b/public/broll/Studying Hard_7958453.mp4 differ diff --git a/public/broll/Vacation Planning_7844849.mp4 b/public/broll/Vacation Planning_7844849.mp4 new file mode 100644 index 0000000..59efdc7 Binary files /dev/null and b/public/broll/Vacation Planning_7844849.mp4 differ diff --git a/public/broll/Verifying Age_6539952.mp4 b/public/broll/Verifying Age_6539952.mp4 new file mode 100644 index 0000000..61e3cb0 Binary files /dev/null and b/public/broll/Verifying Age_6539952.mp4 differ diff --git a/public/broll/Verifying Age_6539953.mp4 b/public/broll/Verifying Age_6539953.mp4 new file mode 100644 index 0000000..bca325a Binary files /dev/null and b/public/broll/Verifying Age_6539953.mp4 differ diff --git a/public/broll/Warm Greeting_3304352.mp4 b/public/broll/Warm Greeting_3304352.mp4 new file mode 100644 index 0000000..8ad7980 Binary files /dev/null and b/public/broll/Warm Greeting_3304352.mp4 differ diff --git a/public/combined_narration/narration_chart_analysis.mp3 b/public/combined_narration/narration_chart_analysis.mp3 new file mode 100644 index 0000000..1c210af Binary files /dev/null and b/public/combined_narration/narration_chart_analysis.mp3 differ diff --git a/public/combined_narration/narration_education_plan.mp3 b/public/combined_narration/narration_education_plan.mp3 new file mode 100644 index 0000000..f68fb98 Binary files /dev/null and b/public/combined_narration/narration_education_plan.mp3 differ diff --git a/public/combined_narration/narration_family_info.mp3 b/public/combined_narration/narration_family_info.mp3 new file mode 100644 index 0000000..058b744 Binary files /dev/null and b/public/combined_narration/narration_family_info.mp3 differ diff --git a/public/combined_narration/narration_financial_intro.mp3 b/public/combined_narration/narration_financial_intro.mp3 new file mode 100644 index 0000000..560f839 Binary files /dev/null and b/public/combined_narration/narration_financial_intro.mp3 differ diff --git a/public/combined_narration/narration_intro.mp3 b/public/combined_narration/narration_intro.mp3 new file mode 100644 index 0000000..1595f3b Binary files /dev/null and b/public/combined_narration/narration_intro.mp3 differ diff --git a/public/combined_narration/narration_life_events.mp3 b/public/combined_narration/narration_life_events.mp3 new file mode 100644 index 0000000..2f26601 Binary files /dev/null and b/public/combined_narration/narration_life_events.mp3 differ diff --git a/public/combined_narration/narration_summary.mp3 b/public/combined_narration/narration_summary.mp3 new file mode 100644 index 0000000..77be454 Binary files /dev/null and b/public/combined_narration/narration_summary.mp3 differ diff --git a/public/dialogue/dialogue_seg_000.mp3 b/public/dialogue/dialogue_seg_000.mp3 new file mode 100644 index 0000000..cccadde Binary files /dev/null and b/public/dialogue/dialogue_seg_000.mp3 differ diff --git a/public/dialogue/dialogue_seg_001.mp3 b/public/dialogue/dialogue_seg_001.mp3 new file mode 100644 index 0000000..d4515df Binary files /dev/null and b/public/dialogue/dialogue_seg_001.mp3 differ diff --git a/public/dialogue/dialogue_seg_002.mp3 b/public/dialogue/dialogue_seg_002.mp3 new file mode 100644 index 0000000..7211b5f Binary files /dev/null and b/public/dialogue/dialogue_seg_002.mp3 differ diff --git a/public/dialogue/dialogue_seg_003.mp3 b/public/dialogue/dialogue_seg_003.mp3 new file mode 100644 index 0000000..878fd6a Binary files /dev/null and b/public/dialogue/dialogue_seg_003.mp3 differ diff --git a/public/dialogue/dialogue_seg_004.mp3 b/public/dialogue/dialogue_seg_004.mp3 new file mode 100644 index 0000000..25711d6 Binary files /dev/null and b/public/dialogue/dialogue_seg_004.mp3 differ diff --git a/public/dialogue/dialogue_seg_005.mp3 b/public/dialogue/dialogue_seg_005.mp3 new file mode 100644 index 0000000..68fddc0 Binary files /dev/null and b/public/dialogue/dialogue_seg_005.mp3 differ diff --git a/public/dialogue/dialogue_seg_006.mp3 b/public/dialogue/dialogue_seg_006.mp3 new file mode 100644 index 0000000..85431c7 Binary files /dev/null and b/public/dialogue/dialogue_seg_006.mp3 differ diff --git a/public/dialogue/dialogue_seg_007.mp3 b/public/dialogue/dialogue_seg_007.mp3 new file mode 100644 index 0000000..0f3067d Binary files /dev/null and b/public/dialogue/dialogue_seg_007.mp3 differ diff --git a/public/dialogue/dialogue_seg_008.mp3 b/public/dialogue/dialogue_seg_008.mp3 new file mode 100644 index 0000000..9c1d6d6 Binary files /dev/null and b/public/dialogue/dialogue_seg_008.mp3 differ diff --git a/public/dialogue/dialogue_seg_009.mp3 b/public/dialogue/dialogue_seg_009.mp3 new file mode 100644 index 0000000..3f394c6 Binary files /dev/null and b/public/dialogue/dialogue_seg_009.mp3 differ diff --git a/public/dialogue/dialogue_seg_010.mp3 b/public/dialogue/dialogue_seg_010.mp3 new file mode 100644 index 0000000..a22b8f3 Binary files /dev/null and b/public/dialogue/dialogue_seg_010.mp3 differ diff --git a/public/dialogue/dialogue_seg_011.mp3 b/public/dialogue/dialogue_seg_011.mp3 new file mode 100644 index 0000000..4891e07 Binary files /dev/null and b/public/dialogue/dialogue_seg_011.mp3 differ diff --git a/public/dialogue/dialogue_seg_012.mp3 b/public/dialogue/dialogue_seg_012.mp3 new file mode 100644 index 0000000..08fd3be Binary files /dev/null and b/public/dialogue/dialogue_seg_012.mp3 differ diff --git a/public/dialogue/dialogue_seg_013.mp3 b/public/dialogue/dialogue_seg_013.mp3 new file mode 100644 index 0000000..14f04d7 Binary files /dev/null and b/public/dialogue/dialogue_seg_013.mp3 differ diff --git a/public/dialogue/dialogue_seg_014.mp3 b/public/dialogue/dialogue_seg_014.mp3 new file mode 100644 index 0000000..33d2c16 Binary files /dev/null and b/public/dialogue/dialogue_seg_014.mp3 differ diff --git a/public/dialogue/dialogue_seg_015.mp3 b/public/dialogue/dialogue_seg_015.mp3 new file mode 100644 index 0000000..1b1444b Binary files /dev/null and b/public/dialogue/dialogue_seg_015.mp3 differ diff --git a/public/dialogue/dialogue_seg_016.mp3 b/public/dialogue/dialogue_seg_016.mp3 new file mode 100644 index 0000000..4f0b4c5 Binary files /dev/null and b/public/dialogue/dialogue_seg_016.mp3 differ diff --git a/public/dialogue/dialogue_seg_017.mp3 b/public/dialogue/dialogue_seg_017.mp3 new file mode 100644 index 0000000..d8ed516 Binary files /dev/null and b/public/dialogue/dialogue_seg_017.mp3 differ diff --git a/public/dialogue/dialogue_seg_018.mp3 b/public/dialogue/dialogue_seg_018.mp3 new file mode 100644 index 0000000..85a8de8 Binary files /dev/null and b/public/dialogue/dialogue_seg_018.mp3 differ diff --git a/public/dialogue/dialogue_seg_019.mp3 b/public/dialogue/dialogue_seg_019.mp3 new file mode 100644 index 0000000..d6e06a9 Binary files /dev/null and b/public/dialogue/dialogue_seg_019.mp3 differ diff --git a/public/dialogue/dialogue_seg_020.mp3 b/public/dialogue/dialogue_seg_020.mp3 new file mode 100644 index 0000000..37d47e4 Binary files /dev/null and b/public/dialogue/dialogue_seg_020.mp3 differ diff --git a/public/dialogue/dialogue_seg_021.mp3 b/public/dialogue/dialogue_seg_021.mp3 new file mode 100644 index 0000000..64b4966 Binary files /dev/null and b/public/dialogue/dialogue_seg_021.mp3 differ diff --git a/public/dialogue/dialogue_seg_022.mp3 b/public/dialogue/dialogue_seg_022.mp3 new file mode 100644 index 0000000..01404d8 Binary files /dev/null and b/public/dialogue/dialogue_seg_022.mp3 differ diff --git a/public/dialogue/dialogue_seg_023.mp3 b/public/dialogue/dialogue_seg_023.mp3 new file mode 100644 index 0000000..f0f0c2c Binary files /dev/null and b/public/dialogue/dialogue_seg_023.mp3 differ diff --git a/public/dialogue/dialogue_seg_024.mp3 b/public/dialogue/dialogue_seg_024.mp3 new file mode 100644 index 0000000..fcd49e2 Binary files /dev/null and b/public/dialogue/dialogue_seg_024.mp3 differ diff --git a/public/dialogue/dialogue_seg_025.mp3 b/public/dialogue/dialogue_seg_025.mp3 new file mode 100644 index 0000000..5d46ac0 Binary files /dev/null and b/public/dialogue/dialogue_seg_025.mp3 differ diff --git a/public/dialogue/dialogue_seg_026.mp3 b/public/dialogue/dialogue_seg_026.mp3 new file mode 100644 index 0000000..967420c Binary files /dev/null and b/public/dialogue/dialogue_seg_026.mp3 differ diff --git a/public/dialogue/dialogue_seg_027.mp3 b/public/dialogue/dialogue_seg_027.mp3 new file mode 100644 index 0000000..8c90990 Binary files /dev/null and b/public/dialogue/dialogue_seg_027.mp3 differ diff --git a/public/dialogue/dialogue_seg_028.mp3 b/public/dialogue/dialogue_seg_028.mp3 new file mode 100644 index 0000000..b1e6f63 Binary files /dev/null and b/public/dialogue/dialogue_seg_028.mp3 differ diff --git a/public/dialogue/dialogue_seg_029.mp3 b/public/dialogue/dialogue_seg_029.mp3 new file mode 100644 index 0000000..1859703 Binary files /dev/null and b/public/dialogue/dialogue_seg_029.mp3 differ diff --git a/public/dialogue/dialogue_seg_030.mp3 b/public/dialogue/dialogue_seg_030.mp3 new file mode 100644 index 0000000..a39d424 Binary files /dev/null and b/public/dialogue/dialogue_seg_030.mp3 differ diff --git a/public/dialogue/dialogue_seg_031.mp3 b/public/dialogue/dialogue_seg_031.mp3 new file mode 100644 index 0000000..4466dc5 Binary files /dev/null and b/public/dialogue/dialogue_seg_031.mp3 differ diff --git a/public/dialogue/dialogue_seg_032.mp3 b/public/dialogue/dialogue_seg_032.mp3 new file mode 100644 index 0000000..0a00409 Binary files /dev/null and b/public/dialogue/dialogue_seg_032.mp3 differ diff --git a/public/dialogue/dialogue_seg_033.mp3 b/public/dialogue/dialogue_seg_033.mp3 new file mode 100644 index 0000000..c49173d Binary files /dev/null and b/public/dialogue/dialogue_seg_033.mp3 differ diff --git a/public/dialogue/dialogue_seg_034.mp3 b/public/dialogue/dialogue_seg_034.mp3 new file mode 100644 index 0000000..6c533a6 Binary files /dev/null and b/public/dialogue/dialogue_seg_034.mp3 differ diff --git a/public/dialogue/dialogue_seg_035.mp3 b/public/dialogue/dialogue_seg_035.mp3 new file mode 100644 index 0000000..71fcded Binary files /dev/null and b/public/dialogue/dialogue_seg_035.mp3 differ diff --git a/public/dialogue/dialogue_seg_036.mp3 b/public/dialogue/dialogue_seg_036.mp3 new file mode 100644 index 0000000..cb61f9e Binary files /dev/null and b/public/dialogue/dialogue_seg_036.mp3 differ diff --git a/public/dialogue/dialogue_seg_037.mp3 b/public/dialogue/dialogue_seg_037.mp3 new file mode 100644 index 0000000..eab5a46 Binary files /dev/null and b/public/dialogue/dialogue_seg_037.mp3 differ diff --git a/public/dialogue/dialogue_seg_038.mp3 b/public/dialogue/dialogue_seg_038.mp3 new file mode 100644 index 0000000..610e8bb Binary files /dev/null and b/public/dialogue/dialogue_seg_038.mp3 differ diff --git a/public/family_intro_audio/narration_child001.mp3 b/public/family_intro_audio/narration_child001.mp3 new file mode 100644 index 0000000..ae53a71 Binary files /dev/null and b/public/family_intro_audio/narration_child001.mp3 differ diff --git a/public/family_intro_audio/narration_child_intro01.mp3 b/public/family_intro_audio/narration_child_intro01.mp3 new file mode 100644 index 0000000..34858c1 Binary files /dev/null and b/public/family_intro_audio/narration_child_intro01.mp3 differ diff --git a/public/family_intro_audio/narration_details01.mp3 b/public/family_intro_audio/narration_details01.mp3 new file mode 100644 index 0000000..1c0f753 Binary files /dev/null and b/public/family_intro_audio/narration_details01.mp3 differ diff --git a/public/family_intro_audio/narration_family001.mp3 b/public/family_intro_audio/narration_family001.mp3 new file mode 100644 index 0000000..d156c86 Binary files /dev/null and b/public/family_intro_audio/narration_family001.mp3 differ diff --git a/public/family_intro_audio/narration_family01.mp3 b/public/family_intro_audio/narration_family01.mp3 new file mode 100644 index 0000000..dec46a9 Binary files /dev/null and b/public/family_intro_audio/narration_family01.mp3 differ diff --git a/public/family_intro_audio/narration_family_summary01.mp3 b/public/family_intro_audio/narration_family_summary01.mp3 new file mode 100644 index 0000000..590d682 Binary files /dev/null and b/public/family_intro_audio/narration_family_summary01.mp3 differ diff --git a/public/family_intro_audio/narration_intro001.mp3 b/public/family_intro_audio/narration_intro001.mp3 new file mode 100644 index 0000000..2127e67 Binary files /dev/null and b/public/family_intro_audio/narration_intro001.mp3 differ diff --git a/public/family_intro_audio/narration_intro01.mp3 b/public/family_intro_audio/narration_intro01.mp3 new file mode 100644 index 0000000..20b84e0 Binary files /dev/null and b/public/family_intro_audio/narration_intro01.mp3 differ diff --git a/public/family_intro_audio/narration_rep001.mp3 b/public/family_intro_audio/narration_rep001.mp3 new file mode 100644 index 0000000..de6d7d4 Binary files /dev/null and b/public/family_intro_audio/narration_rep001.mp3 differ diff --git a/public/family_intro_audio/narration_rep_intro01.mp3 b/public/family_intro_audio/narration_rep_intro01.mp3 new file mode 100644 index 0000000..aaaaabd Binary files /dev/null and b/public/family_intro_audio/narration_rep_intro01.mp3 differ diff --git a/public/family_intro_audio/narration_spouse001.mp3 b/public/family_intro_audio/narration_spouse001.mp3 new file mode 100644 index 0000000..a8285c6 Binary files /dev/null and b/public/family_intro_audio/narration_spouse001.mp3 differ diff --git a/public/family_intro_audio/narration_spouse_intro01.mp3 b/public/family_intro_audio/narration_spouse_intro01.mp3 new file mode 100644 index 0000000..61278a8 Binary files /dev/null and b/public/family_intro_audio/narration_spouse_intro01.mp3 differ diff --git a/public/family_intro_audio/narration_summary001.mp3 b/public/family_intro_audio/narration_summary001.mp3 new file mode 100644 index 0000000..d8ced30 Binary files /dev/null and b/public/family_intro_audio/narration_summary001.mp3 differ diff --git a/public/family_intro_audio/narration_summary01.mp3 b/public/family_intro_audio/narration_summary01.mp3 new file mode 100644 index 0000000..6305dac Binary files /dev/null and b/public/family_intro_audio/narration_summary01.mp3 differ diff --git a/public/family_intro_audio/narration_trans_child01.mp3 b/public/family_intro_audio/narration_trans_child01.mp3 new file mode 100644 index 0000000..7aaab97 Binary files /dev/null and b/public/family_intro_audio/narration_trans_child01.mp3 differ diff --git a/public/family_intro_audio/narration_trans_spouse01.mp3 b/public/family_intro_audio/narration_trans_spouse01.mp3 new file mode 100644 index 0000000..561e900 Binary files /dev/null and b/public/family_intro_audio/narration_trans_spouse01.mp3 differ diff --git a/public/pdf_narration/narration_chart_analysis.mp3 b/public/pdf_narration/narration_chart_analysis.mp3 new file mode 100644 index 0000000..83212b6 Binary files /dev/null and b/public/pdf_narration/narration_chart_analysis.mp3 differ diff --git a/public/pdf_narration/narration_child_intro.mp3 b/public/pdf_narration/narration_child_intro.mp3 new file mode 100644 index 0000000..589f144 Binary files /dev/null and b/public/pdf_narration/narration_child_intro.mp3 differ diff --git a/public/pdf_narration/narration_family_summary.mp3 b/public/pdf_narration/narration_family_summary.mp3 new file mode 100644 index 0000000..07f7269 Binary files /dev/null and b/public/pdf_narration/narration_family_summary.mp3 differ diff --git a/public/pdf_narration/narration_intro.mp3 b/public/pdf_narration/narration_intro.mp3 new file mode 100644 index 0000000..091d9ad Binary files /dev/null and b/public/pdf_narration/narration_intro.mp3 differ diff --git a/public/pdf_narration/narration_page1_family.mp3 b/public/pdf_narration/narration_page1_family.mp3 new file mode 100644 index 0000000..4d81a90 Binary files /dev/null and b/public/pdf_narration/narration_page1_family.mp3 differ diff --git a/public/pdf_narration/narration_page2_events.mp3 b/public/pdf_narration/narration_page2_events.mp3 new file mode 100644 index 0000000..9d4bd7c Binary files /dev/null and b/public/pdf_narration/narration_page2_events.mp3 differ diff --git a/public/pdf_narration/narration_page3_projection.mp3 b/public/pdf_narration/narration_page3_projection.mp3 new file mode 100644 index 0000000..7b44247 Binary files /dev/null and b/public/pdf_narration/narration_page3_projection.mp3 differ diff --git a/public/pdf_narration/narration_page4_education.mp3 b/public/pdf_narration/narration_page4_education.mp3 new file mode 100644 index 0000000..f232c5f Binary files /dev/null and b/public/pdf_narration/narration_page4_education.mp3 differ diff --git a/public/pdf_narration/narration_rep_intro.mp3 b/public/pdf_narration/narration_rep_intro.mp3 new file mode 100644 index 0000000..5c90cbb Binary files /dev/null and b/public/pdf_narration/narration_rep_intro.mp3 differ diff --git a/public/pdf_narration/narration_spouse_intro.mp3 b/public/pdf_narration/narration_spouse_intro.mp3 new file mode 100644 index 0000000..d6518d6 Binary files /dev/null and b/public/pdf_narration/narration_spouse_intro.mp3 differ diff --git a/public/pdf_narration/narration_summary.mp3 b/public/pdf_narration/narration_summary.mp3 new file mode 100644 index 0000000..e9f0bc6 Binary files /dev/null and b/public/pdf_narration/narration_summary.mp3 differ diff --git a/public/pdf_pages/pdf_page_001.png b/public/pdf_pages/pdf_page_001.png new file mode 100644 index 0000000..fffaba7 Binary files /dev/null and b/public/pdf_pages/pdf_page_001.png differ diff --git a/public/pdf_pages/pdf_page_002.png b/public/pdf_pages/pdf_page_002.png new file mode 100644 index 0000000..9ad748b Binary files /dev/null and b/public/pdf_pages/pdf_page_002.png differ diff --git a/public/pdf_pages/pdf_page_003.png b/public/pdf_pages/pdf_page_003.png new file mode 100644 index 0000000..ab67cec Binary files /dev/null and b/public/pdf_pages/pdf_page_003.png differ diff --git a/public/pdf_pages/pdf_page_004.png b/public/pdf_pages/pdf_page_004.png new file mode 100644 index 0000000..88175da Binary files /dev/null and b/public/pdf_pages/pdf_page_004.png differ diff --git a/public/pdf_pages/pdf_page_005.png b/public/pdf_pages/pdf_page_005.png new file mode 100644 index 0000000..154a3b5 Binary files /dev/null and b/public/pdf_pages/pdf_page_005.png differ diff --git a/public/pdf_pages/pdf_page_006.png b/public/pdf_pages/pdf_page_006.png new file mode 100644 index 0000000..27bca44 Binary files /dev/null and b/public/pdf_pages/pdf_page_006.png differ diff --git a/public/pdf_pages/pdf_page_007.png b/public/pdf_pages/pdf_page_007.png new file mode 100644 index 0000000..868f895 Binary files /dev/null and b/public/pdf_pages/pdf_page_007.png differ diff --git a/public/pdf_pages/pdf_page_008.png b/public/pdf_pages/pdf_page_008.png new file mode 100644 index 0000000..b152475 Binary files /dev/null and b/public/pdf_pages/pdf_page_008.png differ diff --git a/public/pdf_pages/pdf_page_009.png b/public/pdf_pages/pdf_page_009.png new file mode 100644 index 0000000..11a8137 Binary files /dev/null and b/public/pdf_pages/pdf_page_009.png differ diff --git a/public/pdf_pages/pdf_page_010.png b/public/pdf_pages/pdf_page_010.png new file mode 100644 index 0000000..934e510 Binary files /dev/null and b/public/pdf_pages/pdf_page_010.png differ diff --git a/public/pdf_pages/pdf_page_011.png b/public/pdf_pages/pdf_page_011.png new file mode 100644 index 0000000..9ceb75f Binary files /dev/null and b/public/pdf_pages/pdf_page_011.png differ diff --git a/public/pdf_pages/pdf_page_012.png b/public/pdf_pages/pdf_page_012.png new file mode 100644 index 0000000..d2c9e63 Binary files /dev/null and b/public/pdf_pages/pdf_page_012.png differ diff --git a/public/pdf_pages/pdf_page_013.png b/public/pdf_pages/pdf_page_013.png new file mode 100644 index 0000000..a0d0c53 Binary files /dev/null and b/public/pdf_pages/pdf_page_013.png differ diff --git a/public/pdf_pages/pdf_page_014.png b/public/pdf_pages/pdf_page_014.png new file mode 100644 index 0000000..6013848 Binary files /dev/null and b/public/pdf_pages/pdf_page_014.png differ diff --git a/public/pdf_pages/pdf_page_015.png b/public/pdf_pages/pdf_page_015.png new file mode 100644 index 0000000..4813331 Binary files /dev/null and b/public/pdf_pages/pdf_page_015.png differ diff --git a/public/pdf_pages/pdf_page_016.png b/public/pdf_pages/pdf_page_016.png new file mode 100644 index 0000000..7abbed2 Binary files /dev/null and b/public/pdf_pages/pdf_page_016.png differ diff --git a/public/pdf_pages/pdf_page_017.png b/public/pdf_pages/pdf_page_017.png new file mode 100644 index 0000000..cf94aaf Binary files /dev/null and b/public/pdf_pages/pdf_page_017.png differ diff --git a/public/pdf_pages/pdf_page_018.png b/public/pdf_pages/pdf_page_018.png new file mode 100644 index 0000000..b291a32 Binary files /dev/null and b/public/pdf_pages/pdf_page_018.png differ diff --git a/public/pdf_pages/pdf_page_019.png b/public/pdf_pages/pdf_page_019.png new file mode 100644 index 0000000..d4431ab Binary files /dev/null and b/public/pdf_pages/pdf_page_019.png differ diff --git a/public/pdf_pages/pdf_page_020.png b/public/pdf_pages/pdf_page_020.png new file mode 100644 index 0000000..c013386 Binary files /dev/null and b/public/pdf_pages/pdf_page_020.png differ diff --git a/public/pdf_pages/pdf_page_021.png b/public/pdf_pages/pdf_page_021.png new file mode 100644 index 0000000..82123d1 Binary files /dev/null and b/public/pdf_pages/pdf_page_021.png differ diff --git a/public/pdf_pages/pdf_page_022.png b/public/pdf_pages/pdf_page_022.png new file mode 100644 index 0000000..e7b6d03 Binary files /dev/null and b/public/pdf_pages/pdf_page_022.png differ diff --git a/public/pdf_pages/pdf_page_023.png b/public/pdf_pages/pdf_page_023.png new file mode 100644 index 0000000..085efe1 Binary files /dev/null and b/public/pdf_pages/pdf_page_023.png differ diff --git a/public/pdf_pages/pdf_page_024.png b/public/pdf_pages/pdf_page_024.png new file mode 100644 index 0000000..957cf4b Binary files /dev/null and b/public/pdf_pages/pdf_page_024.png differ diff --git a/public/pdf_pages/pdf_page_025.png b/public/pdf_pages/pdf_page_025.png new file mode 100644 index 0000000..d311466 Binary files /dev/null and b/public/pdf_pages/pdf_page_025.png differ diff --git a/public/pdf_pages/pdf_page_026.png b/public/pdf_pages/pdf_page_026.png new file mode 100644 index 0000000..914e4e3 Binary files /dev/null and b/public/pdf_pages/pdf_page_026.png differ diff --git a/public/pdf_pages/pdf_page_027.png b/public/pdf_pages/pdf_page_027.png new file mode 100644 index 0000000..4461615 Binary files /dev/null and b/public/pdf_pages/pdf_page_027.png differ diff --git a/public/pdf_pages/pdf_page_028.png b/public/pdf_pages/pdf_page_028.png new file mode 100644 index 0000000..cf3581e Binary files /dev/null and b/public/pdf_pages/pdf_page_028.png differ diff --git a/public/pdf_pages/pdf_page_029.png b/public/pdf_pages/pdf_page_029.png new file mode 100644 index 0000000..0c7932e Binary files /dev/null and b/public/pdf_pages/pdf_page_029.png differ diff --git a/public/pdf_pages/pdf_page_030.png b/public/pdf_pages/pdf_page_030.png new file mode 100644 index 0000000..42ef1dd Binary files /dev/null and b/public/pdf_pages/pdf_page_030.png differ diff --git a/public/pdf_pages/pdf_page_031.png b/public/pdf_pages/pdf_page_031.png new file mode 100644 index 0000000..e1eabd8 Binary files /dev/null and b/public/pdf_pages/pdf_page_031.png differ diff --git a/public/pdf_pages/pdf_page_032.png b/public/pdf_pages/pdf_page_032.png new file mode 100644 index 0000000..26fc255 Binary files /dev/null and b/public/pdf_pages/pdf_page_032.png differ diff --git a/public/pdf_pages/pdf_page_033.png b/public/pdf_pages/pdf_page_033.png new file mode 100644 index 0000000..8d657f4 Binary files /dev/null and b/public/pdf_pages/pdf_page_033.png differ diff --git a/public/pdf_pages/pdf_page_034.png b/public/pdf_pages/pdf_page_034.png new file mode 100644 index 0000000..5d27deb Binary files /dev/null and b/public/pdf_pages/pdf_page_034.png differ diff --git a/public/pdf_pages/pdf_page_035.png b/public/pdf_pages/pdf_page_035.png new file mode 100644 index 0000000..2f0671f Binary files /dev/null and b/public/pdf_pages/pdf_page_035.png differ diff --git a/public/pdf_pages/pdf_page_036.png b/public/pdf_pages/pdf_page_036.png new file mode 100644 index 0000000..ca9ac19 Binary files /dev/null and b/public/pdf_pages/pdf_page_036.png differ diff --git a/public/pdf_pages/pdf_page_037.png b/public/pdf_pages/pdf_page_037.png new file mode 100644 index 0000000..9659601 Binary files /dev/null and b/public/pdf_pages/pdf_page_037.png differ diff --git a/public/pdf_pages/pdf_page_038.png b/public/pdf_pages/pdf_page_038.png new file mode 100644 index 0000000..5cbd6a8 Binary files /dev/null and b/public/pdf_pages/pdf_page_038.png differ diff --git a/public/pdf_pages/pdf_page_039.png b/public/pdf_pages/pdf_page_039.png new file mode 100644 index 0000000..8bf8192 Binary files /dev/null and b/public/pdf_pages/pdf_page_039.png differ diff --git a/public/pdf_pages/pdf_page_040.png b/public/pdf_pages/pdf_page_040.png new file mode 100644 index 0000000..59180c1 Binary files /dev/null and b/public/pdf_pages/pdf_page_040.png differ diff --git a/public/pdf_pages/pdf_page_041.png b/public/pdf_pages/pdf_page_041.png new file mode 100644 index 0000000..1aa41ff Binary files /dev/null and b/public/pdf_pages/pdf_page_041.png differ diff --git a/public/pdf_pages/pdf_page_042.png b/public/pdf_pages/pdf_page_042.png new file mode 100644 index 0000000..e2e6313 Binary files /dev/null and b/public/pdf_pages/pdf_page_042.png differ diff --git a/public/pdf_pages/pdf_page_043.png b/public/pdf_pages/pdf_page_043.png new file mode 100644 index 0000000..b994421 Binary files /dev/null and b/public/pdf_pages/pdf_page_043.png differ diff --git a/public/pdf_pages/pdf_page_044.png b/public/pdf_pages/pdf_page_044.png new file mode 100644 index 0000000..041269e Binary files /dev/null and b/public/pdf_pages/pdf_page_044.png differ diff --git a/public/pdf_pages/pdf_page_045.png b/public/pdf_pages/pdf_page_045.png new file mode 100644 index 0000000..ad5e5c4 Binary files /dev/null and b/public/pdf_pages/pdf_page_045.png differ diff --git a/public/pdf_pages/pdf_page_046.png b/public/pdf_pages/pdf_page_046.png new file mode 100644 index 0000000..0e32387 Binary files /dev/null and b/public/pdf_pages/pdf_page_046.png differ diff --git a/public/pdf_pages/pdf_page_047.png b/public/pdf_pages/pdf_page_047.png new file mode 100644 index 0000000..45469b2 Binary files /dev/null and b/public/pdf_pages/pdf_page_047.png differ diff --git a/public/pdf_pages/pdf_page_048.png b/public/pdf_pages/pdf_page_048.png new file mode 100644 index 0000000..eccf685 Binary files /dev/null and b/public/pdf_pages/pdf_page_048.png differ diff --git a/public/pdf_pages/pdf_page_049.png b/public/pdf_pages/pdf_page_049.png new file mode 100644 index 0000000..fa9709e Binary files /dev/null and b/public/pdf_pages/pdf_page_049.png differ diff --git a/public/pdf_pages/pdf_page_050.png b/public/pdf_pages/pdf_page_050.png new file mode 100644 index 0000000..607465e Binary files /dev/null and b/public/pdf_pages/pdf_page_050.png differ diff --git a/public/pdf_pages/pdf_page_051.png b/public/pdf_pages/pdf_page_051.png new file mode 100644 index 0000000..9b6d512 Binary files /dev/null and b/public/pdf_pages/pdf_page_051.png differ diff --git a/public/pdf_pages/pdf_page_052.png b/public/pdf_pages/pdf_page_052.png new file mode 100644 index 0000000..c580675 Binary files /dev/null and b/public/pdf_pages/pdf_page_052.png differ diff --git a/public/pdf_pages/pdf_page_053.png b/public/pdf_pages/pdf_page_053.png new file mode 100644 index 0000000..6ca4701 Binary files /dev/null and b/public/pdf_pages/pdf_page_053.png differ diff --git a/public/pdf_pages/pdf_page_054.png b/public/pdf_pages/pdf_page_054.png new file mode 100644 index 0000000..2823131 Binary files /dev/null and b/public/pdf_pages/pdf_page_054.png differ diff --git a/public/pdf_pages/pdf_page_055.png b/public/pdf_pages/pdf_page_055.png new file mode 100644 index 0000000..ac56af6 Binary files /dev/null and b/public/pdf_pages/pdf_page_055.png differ diff --git a/public/pdf_pages/pdf_page_056.png b/public/pdf_pages/pdf_page_056.png new file mode 100644 index 0000000..2f332e6 Binary files /dev/null and b/public/pdf_pages/pdf_page_056.png differ diff --git a/public/pdf_pages/pdf_page_057.png b/public/pdf_pages/pdf_page_057.png new file mode 100644 index 0000000..00b3c0d Binary files /dev/null and b/public/pdf_pages/pdf_page_057.png differ diff --git a/public/pdf_pages/pdf_page_058.png b/public/pdf_pages/pdf_page_058.png new file mode 100644 index 0000000..1006978 Binary files /dev/null and b/public/pdf_pages/pdf_page_058.png differ diff --git a/public/pdf_pages/pdf_page_059.png b/public/pdf_pages/pdf_page_059.png new file mode 100644 index 0000000..88a9f78 Binary files /dev/null and b/public/pdf_pages/pdf_page_059.png differ diff --git a/public/pdf_pages/pdf_page_060.png b/public/pdf_pages/pdf_page_060.png new file mode 100644 index 0000000..e129722 Binary files /dev/null and b/public/pdf_pages/pdf_page_060.png differ diff --git a/public/pdf_pages/pdf_page_061.png b/public/pdf_pages/pdf_page_061.png new file mode 100644 index 0000000..3ef89bb Binary files /dev/null and b/public/pdf_pages/pdf_page_061.png differ diff --git a/public/pdf_pages/pdf_page_062.png b/public/pdf_pages/pdf_page_062.png new file mode 100644 index 0000000..8f459e3 Binary files /dev/null and b/public/pdf_pages/pdf_page_062.png differ diff --git a/public/pdf_pages/pdf_page_063.png b/public/pdf_pages/pdf_page_063.png new file mode 100644 index 0000000..d611615 Binary files /dev/null and b/public/pdf_pages/pdf_page_063.png differ diff --git a/public/pdf_pages/pdf_page_064.png b/public/pdf_pages/pdf_page_064.png new file mode 100644 index 0000000..3c12602 Binary files /dev/null and b/public/pdf_pages/pdf_page_064.png differ diff --git a/public/pdf_pages/pdf_page_065.png b/public/pdf_pages/pdf_page_065.png new file mode 100644 index 0000000..29d6633 Binary files /dev/null and b/public/pdf_pages/pdf_page_065.png differ diff --git a/public/pdf_pages/pdf_page_066.png b/public/pdf_pages/pdf_page_066.png new file mode 100644 index 0000000..2f24860 Binary files /dev/null and b/public/pdf_pages/pdf_page_066.png differ diff --git a/public/pdf_pages/pdf_page_067.png b/public/pdf_pages/pdf_page_067.png new file mode 100644 index 0000000..419dcc2 Binary files /dev/null and b/public/pdf_pages/pdf_page_067.png differ diff --git a/public/pdf_pages/pdf_page_068.png b/public/pdf_pages/pdf_page_068.png new file mode 100644 index 0000000..2ffe673 Binary files /dev/null and b/public/pdf_pages/pdf_page_068.png differ diff --git a/public/pdf_pages/pdf_page_069.png b/public/pdf_pages/pdf_page_069.png new file mode 100644 index 0000000..0eb7af8 Binary files /dev/null and b/public/pdf_pages/pdf_page_069.png differ diff --git a/public/pdf_pages/pdf_page_070.png b/public/pdf_pages/pdf_page_070.png new file mode 100644 index 0000000..cca4547 Binary files /dev/null and b/public/pdf_pages/pdf_page_070.png differ diff --git a/public/pdf_pages/pdf_page_071.png b/public/pdf_pages/pdf_page_071.png new file mode 100644 index 0000000..c35f313 Binary files /dev/null and b/public/pdf_pages/pdf_page_071.png differ diff --git a/public/pdf_pages/pdf_page_072.png b/public/pdf_pages/pdf_page_072.png new file mode 100644 index 0000000..5ada5c9 Binary files /dev/null and b/public/pdf_pages/pdf_page_072.png differ diff --git a/public/pdf_pages/pdf_page_073.png b/public/pdf_pages/pdf_page_073.png new file mode 100644 index 0000000..a70f158 Binary files /dev/null and b/public/pdf_pages/pdf_page_073.png differ diff --git a/public/pdf_pages/pdf_page_074.png b/public/pdf_pages/pdf_page_074.png new file mode 100644 index 0000000..bf5e7ea Binary files /dev/null and b/public/pdf_pages/pdf_page_074.png differ diff --git a/public/pdf_pages/pdf_page_075.png b/public/pdf_pages/pdf_page_075.png new file mode 100644 index 0000000..cdecaf9 Binary files /dev/null and b/public/pdf_pages/pdf_page_075.png differ diff --git a/public/pdf_pages/pdf_page_076.png b/public/pdf_pages/pdf_page_076.png new file mode 100644 index 0000000..1c235e8 Binary files /dev/null and b/public/pdf_pages/pdf_page_076.png differ diff --git a/public/pdf_pages/pdf_page_077.png b/public/pdf_pages/pdf_page_077.png new file mode 100644 index 0000000..00b901b Binary files /dev/null and b/public/pdf_pages/pdf_page_077.png differ diff --git a/public/pdf_pages/pdf_page_078.png b/public/pdf_pages/pdf_page_078.png new file mode 100644 index 0000000..2a046e0 Binary files /dev/null and b/public/pdf_pages/pdf_page_078.png differ diff --git a/public/pdf_pages/pdf_page_079.png b/public/pdf_pages/pdf_page_079.png new file mode 100644 index 0000000..06b1a57 Binary files /dev/null and b/public/pdf_pages/pdf_page_079.png differ diff --git a/public/pdf_pages/pdf_page_080.png b/public/pdf_pages/pdf_page_080.png new file mode 100644 index 0000000..f6df6f7 Binary files /dev/null and b/public/pdf_pages/pdf_page_080.png differ diff --git a/public/pdf_pages/pdf_page_081.png b/public/pdf_pages/pdf_page_081.png new file mode 100644 index 0000000..9403745 Binary files /dev/null and b/public/pdf_pages/pdf_page_081.png differ diff --git a/public/ppt_intro_final_audio/narration_s2_child.mp3 b/public/ppt_intro_final_audio/narration_s2_child.mp3 new file mode 100644 index 0000000..a1972b0 Binary files /dev/null and b/public/ppt_intro_final_audio/narration_s2_child.mp3 differ diff --git a/public/ppt_intro_final_audio/narration_s2_household.mp3 b/public/ppt_intro_final_audio/narration_s2_household.mp3 new file mode 100644 index 0000000..7ae46d5 Binary files /dev/null and b/public/ppt_intro_final_audio/narration_s2_household.mp3 differ diff --git a/public/ppt_intro_final_audio/narration_s2_representative.mp3 b/public/ppt_intro_final_audio/narration_s2_representative.mp3 new file mode 100644 index 0000000..a4c2ada Binary files /dev/null and b/public/ppt_intro_final_audio/narration_s2_representative.mp3 differ diff --git a/public/ppt_intro_final_audio/narration_s2_spouse.mp3 b/public/ppt_intro_final_audio/narration_s2_spouse.mp3 new file mode 100644 index 0000000..ea17343 Binary files /dev/null and b/public/ppt_intro_final_audio/narration_s2_spouse.mp3 differ diff --git a/public/ppt_intro_final_audio/narration_s2_welcome.mp3 b/public/ppt_intro_final_audio/narration_s2_welcome.mp3 new file mode 100644 index 0000000..009afc4 Binary files /dev/null and b/public/ppt_intro_final_audio/narration_s2_welcome.mp3 differ diff --git a/public/ppt_intro_final_audio/narration_s3_closing.mp3 b/public/ppt_intro_final_audio/narration_s3_closing.mp3 new file mode 100644 index 0000000..15be07d Binary files /dev/null and b/public/ppt_intro_final_audio/narration_s3_closing.mp3 differ diff --git a/public/ppt_intro_final_audio/narration_s3_life_events.mp3 b/public/ppt_intro_final_audio/narration_s3_life_events.mp3 new file mode 100644 index 0000000..aec2625 Binary files /dev/null and b/public/ppt_intro_final_audio/narration_s3_life_events.mp3 differ diff --git a/public/ppt_intro_final_audio/narration_s3_planning.mp3 b/public/ppt_intro_final_audio/narration_s3_planning.mp3 new file mode 100644 index 0000000..2a8b4de Binary files /dev/null and b/public/ppt_intro_final_audio/narration_s3_planning.mp3 differ diff --git a/public/ppt_intro_final_audio/narration_s3_transition.mp3 b/public/ppt_intro_final_audio/narration_s3_transition.mp3 new file mode 100644 index 0000000..299f995 Binary files /dev/null and b/public/ppt_intro_final_audio/narration_s3_transition.mp3 differ diff --git a/public/segment_001.mp3 b/public/segment_001.mp3 index 3e91d7a..94dc1c9 100644 Binary files a/public/segment_001.mp3 and b/public/segment_001.mp3 differ diff --git a/public/segment_002.mp3 b/public/segment_002.mp3 index 7d857ff..536f6c2 100644 Binary files a/public/segment_002.mp3 and b/public/segment_002.mp3 differ diff --git a/public/segment_003.mp3 b/public/segment_003.mp3 index bde393a..099171b 100644 Binary files a/public/segment_003.mp3 and b/public/segment_003.mp3 differ diff --git a/public/segment_004.mp3 b/public/segment_004.mp3 index 2562288..d2f6867 100644 Binary files a/public/segment_004.mp3 and b/public/segment_004.mp3 differ diff --git a/public/segment_005.mp3 b/public/segment_005.mp3 index f1f935c..7e52cdd 100644 Binary files a/public/segment_005.mp3 and b/public/segment_005.mp3 differ diff --git a/public/segment_006.mp3 b/public/segment_006.mp3 index 975c022..ae7dcd7 100644 Binary files a/public/segment_006.mp3 and b/public/segment_006.mp3 differ diff --git a/public/segment_007.mp3 b/public/segment_007.mp3 index 3d9ed6b..573de4a 100644 Binary files a/public/segment_007.mp3 and b/public/segment_007.mp3 differ diff --git a/public/segment_008.mp3 b/public/segment_008.mp3 index a390d19..c52fc50 100644 Binary files a/public/segment_008.mp3 and b/public/segment_008.mp3 differ diff --git a/public/segment_009.mp3 b/public/segment_009.mp3 index 12d058d..a305601 100644 Binary files a/public/segment_009.mp3 and b/public/segment_009.mp3 differ diff --git a/public/segment_010.mp3 b/public/segment_010.mp3 index 8bbd43f..62ee213 100644 Binary files a/public/segment_010.mp3 and b/public/segment_010.mp3 differ diff --git a/public/segment_011.mp3 b/public/segment_011.mp3 index 21e367a..bd4d810 100644 Binary files a/public/segment_011.mp3 and b/public/segment_011.mp3 differ diff --git a/public/segment_012.mp3 b/public/segment_012.mp3 index eda0941..f345e58 100644 Binary files a/public/segment_012.mp3 and b/public/segment_012.mp3 differ diff --git a/public/segment_013.mp3 b/public/segment_013.mp3 index 1fdde1f..102314e 100644 Binary files a/public/segment_013.mp3 and b/public/segment_013.mp3 differ diff --git a/public/segment_014.mp3 b/public/segment_014.mp3 index e351fd3..8ab2885 100644 Binary files a/public/segment_014.mp3 and b/public/segment_014.mp3 differ diff --git a/public/segment_015.mp3 b/public/segment_015.mp3 index f7326c0..82ea96c 100644 Binary files a/public/segment_015.mp3 and b/public/segment_015.mp3 differ diff --git a/public/segment_016.mp3 b/public/segment_016.mp3 index e55154d..f666ca5 100644 Binary files a/public/segment_016.mp3 and b/public/segment_016.mp3 differ diff --git a/public/segment_017.mp3 b/public/segment_017.mp3 index 4248aa8..3a0340f 100644 Binary files a/public/segment_017.mp3 and b/public/segment_017.mp3 differ diff --git a/public/segment_018.mp3 b/public/segment_018.mp3 index 9c307dd..e47958f 100644 Binary files a/public/segment_018.mp3 and b/public/segment_018.mp3 differ diff --git a/public/segment_019.mp3 b/public/segment_019.mp3 new file mode 100644 index 0000000..165ea25 Binary files /dev/null and b/public/segment_019.mp3 differ diff --git a/public/segment_020.mp3 b/public/segment_020.mp3 new file mode 100644 index 0000000..eab34bf Binary files /dev/null and b/public/segment_020.mp3 differ diff --git a/public/slide_001.png b/public/slide_001.png index e0349f7..8f6bce1 100644 Binary files a/public/slide_001.png and b/public/slide_001.png differ diff --git a/public/slide_002.png b/public/slide_002.png index 0bf4e2e..3cb1d60 100644 Binary files a/public/slide_002.png and b/public/slide_002.png differ diff --git a/public/slide_003.png b/public/slide_003.png index 908396e..7f2b068 100644 Binary files a/public/slide_003.png and b/public/slide_003.png differ diff --git a/public/slide_004.png b/public/slide_004.png index 1fe76b7..fb46bab 100644 Binary files a/public/slide_004.png and b/public/slide_004.png differ diff --git a/public/slide_005.png b/public/slide_005.png index e53ef82..e50bf3e 100644 Binary files a/public/slide_005.png and b/public/slide_005.png differ diff --git a/public/slide_006.png b/public/slide_006.png index 6003de6..bc035c6 100644 Binary files a/public/slide_006.png and b/public/slide_006.png differ diff --git a/public/slide_007.png b/public/slide_007.png index 6cfa425..8660b03 100644 Binary files a/public/slide_007.png and b/public/slide_007.png differ diff --git a/public/slide_1_narration/narration_intro.mp3 b/public/slide_1_narration/narration_intro.mp3 new file mode 100644 index 0000000..9aade0c Binary files /dev/null and b/public/slide_1_narration/narration_intro.mp3 differ diff --git a/public/slide_1_narration/narration_section_1.mp3 b/public/slide_1_narration/narration_section_1.mp3 new file mode 100644 index 0000000..8a8b609 Binary files /dev/null and b/public/slide_1_narration/narration_section_1.mp3 differ diff --git a/public/slide_1_narration/narration_section_2.mp3 b/public/slide_1_narration/narration_section_2.mp3 new file mode 100644 index 0000000..b9b981e Binary files /dev/null and b/public/slide_1_narration/narration_section_2.mp3 differ diff --git a/public/slide_1_narration/narration_section_3.mp3 b/public/slide_1_narration/narration_section_3.mp3 new file mode 100644 index 0000000..f079a34 Binary files /dev/null and b/public/slide_1_narration/narration_section_3.mp3 differ diff --git a/public/slide_1_narration/narration_section_4.mp3 b/public/slide_1_narration/narration_section_4.mp3 new file mode 100644 index 0000000..398c1cd Binary files /dev/null and b/public/slide_1_narration/narration_section_4.mp3 differ diff --git a/public/slide_1_narration/narration_summary.mp3 b/public/slide_1_narration/narration_summary.mp3 new file mode 100644 index 0000000..1bd0c40 Binary files /dev/null and b/public/slide_1_narration/narration_summary.mp3 differ diff --git a/src/Composition.tsx b/src/Composition.tsx index a67bc20..2ced852 100644 --- a/src/Composition.tsx +++ b/src/Composition.tsx @@ -34,44 +34,127 @@ const FloatingInsight: React.FC<{ text: string; delay: number; durationInFrames: if (!text || text.length < 5) return null; + // Extract core content summary based on text patterns + const getCoreSummary = (fullText: string): string => { + // Pattern matching for different content types + + // 1. Family member introduction pattern (名前 + 年齢 + 職業) + const memberPattern = /([ぁ-んァ-ヶー]+様?|お子様).*?(\d+)歳.*?(情報通信業|卸売・小売業|保育園|小学校|中学校)/; + const memberMatch = fullText.match(memberPattern); + if (memberMatch) { + const name = memberMatch[1]; + const age = memberMatch[2]; + const role = memberMatch[3]; + return `${name} ${age}歳\n${role}`; + } + + // 2. Financial summary pattern (収入・資産・支出) + const financePattern = /(世帯年収|年収|資産|支出).*?(\d+)万円/g; + const financeMatches = [...fullText.matchAll(financePattern)]; + if (financeMatches.length >= 2) { + const items = financeMatches.slice(0, 2).map(m => `${m[1]}: ${m[2]}万円`); + return items.join('\n'); + } + + // 3. Education plan pattern + const eduPattern = /(保育園|小学校|中学校|高校|大学).*?(公立|私立|認可)/g; + const eduMatches = [...fullText.matchAll(eduPattern)]; + if (eduMatches.length > 0) { + const plan = eduMatches.map(m => `${m[1]}${m[2]}`).join('→'); + return `教育プラン\n${plan}`; + } + + // 4. Life events pattern + const eventPattern = /(進学|購入|退職|生活設計|ライフイベント)/; + if (eventPattern.test(fullText)) { + const events = fullText.match(/(進学|マイホーム購入|退職後の生活)/g); + if (events && events.length > 0) { + return `今後の予定\n${events.slice(0, 2).join('・')}`; + } + return '将来のライフイベント\n計画的な準備'; + } + + // 5. Planning/proposal pattern + const planPattern = /(ライフプラン|提案|サポート|資産運用)/; + if (planPattern.test(fullText)) { + return 'ライフプラン\n最適なご提案'; + } + + // 6. Greeting/introduction pattern + const greetPattern = /(こんにちは|ご紹介|ご清聴)/; + if (greetPattern.test(fullText)) { + if (fullText.includes('ご清聴')) { + return '本日はありがとう\nございました'; + } + const nameMatch = fullText.match(/([ぁ-んァ-ヶー]+太郎)様/); + if (nameMatch) { + return `${nameMatch[1]}様\nご家族紹介`; + } + return 'ライフプラン\nご紹介'; + } + + // Default: extract first meaningful phrase + const sentences = fullText.split(/[。!?]/); + const firstSentence = sentences[0]?.trim() || fullText; + + // Try to extract key numbers + const numbers = firstSentence.match(/\d+[万円歳年]+/g); + if (numbers && numbers.length > 0) { + const keyPhrase = firstSentence.substring(0, 30); + return keyPhrase.includes('。') ? keyPhrase : keyPhrase + '...'; + } + + return firstSentence.substring(0, 25) + '...'; + }; + + const displayText = getCoreSummary(text); + return (