/**
 * Interfaces for profit and loss records in SHAAM6111 reports
 * Based on the Israeli Tax Authority specification
 */

// Section 1.1
export const SECTION_1_1 = [1000, 1010, 1015, 1020, 1025, 1030, 1040, 1051, 1052, 1090] as const;
// Section 1.2
export const SECTION_1_2 = [
  1300, 1306, 1308, 1307, 1310, 1320, 1330, 1340, 1350, 1360, 1371, 1372, 1390, 1400, 1450,
] as const;
// Section 1.3
export const SECTION_1_3 = [
  2000, 2005, 2006, 2011, 2012, 2015, 2020, 2025, 2030, 2035, 2040, 2045, 2050, 2060, 2066, 2067,
  2068, 2070, 2075, 2080, 2085, 2090, 2095,
] as const;
// Section 1.4
export const SECTION_1_4 = [2590, 2570, 2560, 2550, 2540, 2530, 2520, 2510, 2500] as const;
// Section 1.5
export const SECTION_1_5 = [
  3000, 3011, 3013, 3012, 3015, 3020, 3025, 3030, 3040, 3045, 3050, 3060, 3066,
] as const;
// Section 1.6
export const SECTION_1_6 = [3067, 3068, 3070, 3075, 3080, 3085, 3090, 3100, 3120, 3190] as const;
// Section 1.7
export const SECTION_1_7 = [
  3500, 3511, 3513, 3512, 3515, 3520, 3530, 3535, 3540, 3545, 3550,
] as const;
// Section 1.8
export const SECTION_1_8 = [
  3560, 3566, 3567, 3568, 3570, 3575, 3580, 3590, 3595, 3600, 3610, 3620, 3625, 3631, 3632, 3640,
  3650, 3660, 3665, 3680, 3685, 3690,
] as const;
// Section 1.9
export const SECTION_1_9 = [5000, 5010, 5020, 5025, 5030, 5040, 5050, 5051, 5090] as const;
// Section 1.10
export const SECTION_1_10 = [5100, 5110, 5121, 5122, 5130, 5150, 5160, 5190] as const;
// Section 1.11
export const SECTION_1_11 = [
  5200, 5210, 5220, 5230, 5236, 5237, 5240, 5250, 5260, 5270, 5290,
] as const;
// Section 1.12
export const SECTION_1_12 = [5300, 5310, 5320, 5330, 5390] as const;
// Section 1.13
export const SECTION_1_13 = [6666] as const;
// Section 1.14
export const SECTION_1_14 = [5600, 5610, 5620, 5630] as const;
// Section 1.15
export const SECTION_1_15 = [5700, 5710] as const;
// Section 1.16
export const SECTION_1_16 = [5800, 5810] as const;

// Define the allowed code values for profit and loss section
// These are the only valid codes per the specification
export const ALLOWED_PROFIT_LOSS_CODES = [
  ...SECTION_1_1,
  ...SECTION_1_2,
  ...SECTION_1_3,
  ...SECTION_1_4,
  ...SECTION_1_5,
  ...SECTION_1_6,
  ...SECTION_1_7,
  ...SECTION_1_8,
  ...SECTION_1_9,
  ...SECTION_1_10,
  ...SECTION_1_11,
  ...SECTION_1_12,
  ...SECTION_1_13,
  ...SECTION_1_14,
  ...SECTION_1_15,
  ...SECTION_1_16,
] as const;

// Create a type for the allowed codes
export type AllowedProfitLossCode = (typeof ALLOWED_PROFIT_LOSS_CODES)[number];

// Define which codes can have negative values
export const NEGATIVE_ALLOWED_PROFIT_LOSS_CODES = [
  // Section 1.53
  1000, 1090,
  // Section 1.54
  1300, 1350, 1360, 1390,
  // Section 1.55
  2090,
  // Section 1.56
  2500, 2590,
  // Section 1.57
  3190,
  // Section 1.58
  3500, 3610, 3690,
  // Section 1.59
  5000, 5040, 5090,
  // Section 1.60
  5300, 5330,
  // Section 1.61
  6666,
  // Section 1.62
  5600, 5610, 5620, 5630,
  // Section 1.63
  5800, 5810,
] as const;

// Define the summary codes that should equal the sum of their subsections
export const COMMON_PROFIT_LOSS_SUMMARY_CODES = [
  1000, 2500, 5000, 5100, 5200, 5300, 5600, 5700, 5800,
] as const;

// Define the summary codes that are not simple sums
export const UNCOMMON_PROFIT_LOSS_SUMMARY_CODES = [1300, 2000, 3000, 3500, 6666] as const;

export const _PROFIT_LOSS_SUMMARY_CODES = [
  ...COMMON_PROFIT_LOSS_SUMMARY_CODES,
  ...UNCOMMON_PROFIT_LOSS_SUMMARY_CODES,
] as const;

export type CommonProfitLossSummaryCode = (typeof COMMON_PROFIT_LOSS_SUMMARY_CODES)[number];
export type ProfitLossSummaryCode = (typeof _PROFIT_LOSS_SUMMARY_CODES)[number];

export const PROFIT_LOSS_CODE_NAMES: Record<AllowedProfitLossCode, string> = {
  1010: 'הכנסות ממכירות בארץ',
  1015: 'הכנסות ממכירת מבנים כקבלן בונה',
  1020: 'הכנסות ממכירות לחו"ל',
  1025: 'הכנסה מביצוע עבודות כקבלן מבצע',
  1030: 'הכנסות ממתן שירותים בארץ',
  1040: 'הכנסות ממתן שירותים בחו"ל',
  1051: 'הכנסות מצדדים קשורים בארץ',
  1052: 'הכנסות מצדדים קשורים בחו"ל',
  1090: 'הכנסות אחרות',
  1000: 'סה"כ הכנסות ממכירות, מתן שירותים וביצוע עבודות',
  1300: 'עלות המכירות, מתן השירותים וביצוע עבודות',
  1306: 'שכר עבודה',
  1307: 'נילוות לשכר עבודה',
  1308: 'הוצאות בגין אופציות לעובדים',
  1310: 'עבודות חוץ וקבלני משנה',
  1320: 'קניות סחורה בארץ',
  1330: 'קניות חומרי גלם וחומרי בנייה בארץ ובחו"ל',
  1340: 'קניית סחורות בחו"ל',
  1350: 'הפרשי שער בגין קניות במטבע חוץ',
  1360: 'הוצאות לאחריות ולתביעות',
  1371: 'קניות מצדדים קשורים בארץ',
  1372: 'קניות מצדדים קשורים בחו"ל',
  1390: 'עלויות אחרות',
  1400: 'מלאי בתחילת התקופה',
  1450: 'מלאי בסוף התקופה',
  2000: 'סה"כ עלויות ייצור ועלויות אצל קבלן בונה',
  2005: 'מלאי תחילת תקופה',
  2006: 'הוצאות בגין אופציות לעובדים',
  2011: 'שכר עבודה ייצור',
  2012: 'נילוות לשכר עבודה ייצור',
  2015: 'עלות קרקעות ופיתוח אצל קבלן בונה',
  2020: 'עבודות חוץ וקבלני משנה',
  2025: 'הוצאות אחראיות ותביעות',
  2030: 'הוצאות ציוד מתכלה',
  2035: 'הוצאות הובלה ואחסנה',
  2040: 'הוצאות אריזה',
  2045: 'הוצאות אחזקה ותיקונים',
  2050: 'ביטוחים',
  2060: 'דמי שכירות וניהול נכסים',
  2066: 'אחזקת רכב והובלות (ללא דלק)',
  2067: 'הוצאות דלק (לפני החזרים)',
  2068: 'החזר בלו על דלק',
  2070: 'מסים ואגרות',
  2075: 'פחת',
  2080: 'בגדי עבודה',
  2085: 'חשמל ומים',
  2090: 'עלויות ייצור אחרות',
  2095: 'מלאי בסוף תקופה',
  2500: 'סה"כ הוצאות מחקר ופיתוח',
  2510: 'שכר עבודה',
  2520: 'נילוות לשכר עבודה',
  2530: 'הוצאות שכר בגין אופציות לעובדים',
  2540: 'עבודות חוץ',
  2550: 'הוצאות פחת',
  2560: 'אחזקת רכב',
  2570: 'תגמולים בגין מו"פ (כדוגמא למדען הראשי)',
  2590: 'אחרות',
  3000: 'סה"כ הוצאות מכירה',
  3011: 'שכר עבודה',
  3012: 'נילוות לשכר עבודה',
  3013: 'הוצאות בגין אופציות לעובדים',
  3015: 'הוצאות הובלה ואחסנה',
  3020: 'עמלות ובונוסים לסוכנים עצמאים',
  3025: 'ביטוחים',
  3030: 'הוצאות לקבלני משנה',
  3040: 'הוצאות אריזה',
  3045: 'נסיעות',
  3050: 'הוצאות אחזקה ותיקונים',
  3060: 'דמי שכירות וניהול נכסים',
  3066: 'אחזקת רכב והובלות (ללא דלק)',
  3067: 'הוצאות דלק (לפני החזרים)',
  3068: 'החזר בלו על דלק',
  3070: 'מכרזים, ירידים ותערוכות',
  3075: 'פרסום וקידום מכירות',
  3080: 'פחת',
  3085: 'חשמל ומים',
  3090: 'בגדי עבודה',
  3100: 'השתלמות וספרות מקצועית',
  3120: 'עמלות וכרטיסי אשראי',
  3190: 'שונות נטו',
  3500: 'סה"כ הוצאות הנהלה וכלליות',
  3511: 'שכר עבודה',
  3512: 'נילוות לשכר עבודה',
  3513: 'הוצאות בגין אופציות לעובדים',
  3515: 'ביטוחים',
  3520: 'עבודות חוץ וקבלני משנה',
  3530: 'עמלות ובונוסים לסוכנים',
  3535: 'הוצאות ציוד מתכלה',
  3540: 'שירותים מקצועיים',
  3545: 'הוצאות אריזה',
  3550: 'הוצאות אחזקה ותיקונים',
  3560: 'נסיעות',
  3566: 'אחזקת רכב והובלות (ללא דלק)',
  3567: 'הוצאות דלק (לפני החזרים)',
  3568: 'החזר בלו על דלק',
  3570: 'דמי שכירות וניהול נכסים',
  3575: 'מסים ואגרות',
  3580: 'פחת',
  3590: 'חשמל ומים',
  3595: 'שמירה וניקיון',
  3600: 'חובות מסופקים ואבודים',
  3610: 'פרסום וקידום מכירות',
  3620: 'כיבודים, מתנות, תרומות, קנסות',
  3625: 'הוצאות בגין צדדים קשורים בארץ',
  3631: 'הוצאות בגין צדדים קשורים בחו"ל',
  3632: 'הוצאות בגין צדדים קשורים בחו"ל',
  3640: 'דמי ניהול',
  3650: 'הוצאות דואר ותקשורת',
  3660: 'נסיעות לחו"ל',
  3665: 'הוצאות משפטיות',
  3680: 'משרדיות',
  3685: 'בגדי עבודה',
  3690: 'שונות נטו וביטולי יתרות',
  5000: 'סה"כ הוצאות מימון',
  5010: 'לתאגידים בנקאיים',
  5020: 'לצדדים קשורים בארץ',
  5025: 'לצדדים קשורים בחו"ל',
  5030: 'במטבע חוץ',
  5040: 'בגין ספקים וזכאים',
  5050: 'שיערוך נכסים/התחייבויות פיננסיות',
  5051: 'בגין חוב מס',
  5090: 'אחרות',
  5100: 'סה"כ הכנסות מימון',
  5110: 'מתאגידים בנקאיים',
  5121: 'מצדדים קשורים בארץ',
  5122: 'מצדדים קשורים בחו"ל',
  5130: 'מהפרשי שער',
  5150: 'שיערוך נכסים/התחייבויות פיננסיות',
  5160: 'ריבית מאשראי חריג ממכירת מלאי/רכוש קבוע/נדל"ן',
  5190: 'אחרות',
  5200: 'סה"כ הכנסות אחרות',
  5210: 'רווח הון ממימוש רכוש קבוע',
  5220: 'רווח הון אחר',
  5230: 'הכנסות מדמי ניהול',
  5236: 'הכנסות מדמי ניהול מצדדים קשורים בארץ',
  5237: 'הכנסות מדמי ניהול מצדדים קשורים בחו"ל',
  5240: 'הכנסות מדיבידנד',
  5250: 'הכנסות מהשכרת מבנים וקרקעות',
  5260: 'הכנסות מתמלוגים',
  5270: 'הכנסות/מענקים (לדוגמא מהמדען הראשי)',
  5290: 'שונות',
  5300: 'סה"כ הוצאות אחרות',
  5310: 'הפסד הון ממימוש רכוש קבוע',
  5320: 'הפסד הון אחר',
  5330: 'הפרשה לירידת ערך',
  5390: 'שונות',
  5600: 'סה"כ מסים על הכנסה',
  5610: 'מסים שוטפים',
  5620: 'מסים נדחים',
  5630: 'מסים בגין שנים קודמות',
  5700: 'סה"כ ייעוד הרווחים',
  5710: 'דיבידנד לחלוקה',
  5800: 'סה"כ רווח/הפסד אקויטי',
  5810: 'רווח/הפסד אקויטי',
  6666: 'סה"כ רווח/הפסד לפני מסים',
} as const;
