Files
2025-11-30 08:39:54 +08:00

185 lines
7.8 KiB
TypeScript

/**
* Report generation utilities for company analysis
*/
import type { CompanyData } from './company-analyzer';
import { NOT_AVAILABLE } from './constants';
/**
* Generates the header section of the Markdown report
* Creates the title and executive summary for the company analysis report
* @param {CompanyData} companyData - The company analysis data containing the company name
* @returns {string} A formatted Markdown string for the report header section
*/
export function generateHeaderSection(companyData: CompanyData): string {
return `# Company Analysis Report: ${companyData..company_name}
## 📊 Executive Summary
This comprehensive analysis provides insights into ${companyData..company_name}'s business operations, financial performance, market position, and recent developments.`;
}
/**
* Generates the basic information section of the Markdown report
* Creates a formatted section with company name, founding date, headquarters, and website
* @param {CompanyData} companyData - The company analysis data containing basic company information
* @returns {string} A formatted Markdown string for the basic information section
*/
export function generateBasicInfoSection(companyData: CompanyData): string {
return `## 🏢 Basic Information
- **Company Name:** ${companyData..company_name}
- **Founded:** ${companyData..founded_date || NOT_AVAILABLE}
- **Headquarters:** ${companyData..headquarters || NOT_AVAILABLE}
- **Website:** ${companyData..website || NOT_AVAILABLE}
- **Industry:** ${companyData..industry || NOT_AVAILABLE}`;
}
/**
* Generates the leadership section of the Markdown report
* Creates a formatted section with CEO and key executives information
* @param {CompanyData} companyData - The company analysis data containing leadership information
* @returns {string} A formatted Markdown string for the leadership section
*/
export function generateLeadershipSection(companyData: CompanyData): string {
const executives = companyData.leadership.key_executives
.map(exec => `- **${exec.position}:** ${exec.name}`)
.join('\n') || 'No key executives identified';
return `## 👥 Leadership
- **CEO:** ${companyData.leadership.ceo || NOT_AVAILABLE}
### Key Executives
${executives}`;
}
/**
* Generates the financial performance section of the Markdown report
* Creates a formatted section with revenue, market cap, profit margin, and growth data
* @param {CompanyData} companyData - The company analysis data containing financial information
* @returns {string} A formatted Markdown string for the financial performance section
*/
export function generateFinancialSection(companyData: CompanyData): string {
return `## 💰 Financial Performance
- **Revenue:** ${companyData.financial.revenue || NOT_AVAILABLE}
- **Market Cap:** ${companyData.financial.market_cap || NOT_AVAILABLE}
- **Profit Margin:** ${companyData.financial.profit_margin || NOT_AVAILABLE}
- **Revenue Growth:** ${companyData.financial.revenue_growth || NOT_AVAILABLE}`;
}
/**
* Generates the market position section of the Markdown report
* Creates a formatted section with market share, competitors, and customer segments
* @param {CompanyData} companyData - The company analysis data containing market position information
* @returns {string} A formatted Markdown string for the market position section
*/
export function generateMarketPositionSection(companyData: CompanyData): string {
const competitors = companyData.market_position.competitors
.map(comp => `- ${comp}`)
.join('\n') || 'No competitors identified';
const customerSegments = companyData.market_position.customer_segments
.map(seg => `- ${seg}`)
.join('\n') || 'No customer segments identified';
return `## 🎯 Market Position
- **Market Share:** ${companyData.market_position.market_share || NOT_AVAILABLE}
### Competitors
${competitors}
### Customer Segments
${customerSegments}`;
}
/**
* Generates the recent developments section of the Markdown report
* Creates a formatted section with recent news, partnerships, and company developments
* @param {CompanyData} companyData - The company analysis data containing recent developments information
* @returns {string} A formatted Markdown string for the recent developments section
*/
export function generateRecentDevelopmentsSection(companyData: CompanyData): string {
const developments = companyData.recent_developments
.map(dev => `- **${dev.date}:** ${dev.description} (${dev.source})`)
.join('\n') || 'No recent developments identified';
return `## 📈 Recent Developments
${developments}`;
}
/**
* Generates the culture and employment section of the Markdown report
* Creates a formatted section with employee satisfaction and benefits information
* @param {CompanyData} companyData - The company analysis data containing culture and employment information
* @returns {string} A formatted Markdown string for the culture and employment section
*/
export function generateCultureSection(companyData: CompanyData): string {
const benefits = companyData.culture_employment.benefits
.map(benefit => `- ${benefit}`)
.join('\n') || 'No benefits information available';
return `## 🏢 Culture & Employment
- **Employee Satisfaction:** ${companyData.culture_employment.employee_satisfaction || NOT_AVAILABLE}
### Benefits
${benefits}`;
}
/**
* Generates the sources section of the Markdown report
* Creates a formatted section listing all sources used in the analysis with reliability ratings
* @param {CompanyData} companyData - The company analysis data containing sources information
* @returns {string} A formatted Markdown string for the sources section
*/
export function generateSourcesSection(companyData: CompanyData): string {
const sources = companyData.sources
.map((source, index) =>
`${index + 1}. [${source.title}](${source.url}) - ${source.reliability} reliability - Accessed ${new Date(source.access_date).toLocaleDateString()}`
)
.join('\n');
return `## 📚 Sources
${sources}`;
}
/**
* Generates the footer section of the Markdown report
* Creates a disclaimer and attribution for the automatically generated report
* @returns {string} A formatted Markdown string for the report footer section
*/
export function generateFooter(): string {
return `---
*This report was generated automatically using the Deep Research Professional skill. Information accuracy should be verified with official sources.*`;
}
/**
* Generates a CSV report from company analysis data
* Creates a tabular format with key company information organized by category
* @param {CompanyData} companyData - The complete company analysis data to format into CSV
* @returns {string} A formatted CSV string containing the company analysis data
*/
export function generateCSVReport(companyData: CompanyData): string {
const headers = ['Category', 'Field', 'Value'];
const rows = [
['Basic Information', 'Company Name', companyData..company_name],
['Basic Information', 'Founded Date', companyData..founded_date],
['Basic Information', 'Headquarters', companyData..headquarters],
['Basic Information', 'Website', companyData..website],
['Leadership', 'CEO', companyData.leadership.ceo],
['Financial', 'Revenue', companyData.financial.revenue],
['Financial', 'Market Cap', companyData.financial.market_cap],
['Financial', 'Profit Margin', companyData.financial.profit_margin],
['Financial', 'Revenue Growth', companyData.financial.revenue_growth],
['Market Position', 'Market Share', companyData.market_position.market_share],
['Culture', 'Employee Satisfaction', companyData.culture_employment.employee_satisfaction],
];
return [headers, ...rows].map(row => row.map(cell => `"${cell}"`).join(',')).join('\n');
}