/**
 * Tax Adjustment Record Interfaces
 * Based on the SHAAM 6111 specification (IncomeTax_software-houses-6111-2023.pdf)
 */

// Section 1.27: Cash and cash equivalents
export const SECTION_1_27 = [7100, 7110, 7120, 7150] as const;
// Section 1.28: Securities
export const SECTION_1_28 = [7200, 7215, 7225, 7230, 7290, 7295] as const;
// Section 1.29: Accounts receivable
export const SECTION_1_29 = [7300, 7310, 7320, 7330, 7350, 7360, 7380, 7390] as const;
// Section 1.30: Inventory
export const SECTION_1_30 = [7400, 7410, 7420, 7430, 7440, 7450, 7461, 7462, 7470, 7490] as const;
// Section 1.21: Long-term investments
export const SECTION_1_21 = [7600, 7610, 7620, 7690] as const;
// Section 1.32: Loans granted
export const SECTION_1_32 = [7700, 7711, 7712, 7720] as const;
// Section 1.33: Fixed assets
export const SECTION_1_33 = [
  7800, 7805, 7810, 7815, 7820, 7825, 7830, 7840, 7850, 7860, 7870, 7890,
] as const;

// Section 1.35: Fixed assets detail
export const SECTION_1_35 = [
  8000, 8010, 8020, 8025, 8030, 8040, 8050, 8060, 8080, 8090, 8095, 8100, 8105, 8110, 8120, 8130,
  8140, 8150, 8160, 8170, 8180, 8190,
] as const;
// Section 1.36: Other assets
export const SECTION_1_36 = [8700, 8710] as const;
// Section 1.37: Credit from banking corporations
export const SECTION_1_37 = [8200, 8210, 8220, 8290] as const;
// Section 1.38: Suppliers and service providers
export const SECTION_1_38 = [8300, 8315, 8325, 8335, 8340, 8350] as const;
// Section 1.39: Accounts payable
export const SECTION_1_39 = [8400, 8410, 8420, 8440, 8450, 8460, 8490] as const;
// Section 1.40: Advances from customers
export const SECTION_1_40 = [8500, 8510, 8520, 8590] as const;
// Section 1.41: Deferred income
export const SECTION_1_41 = [8600, 8610, 8620, 8630, 8640, 8690] as const;

// Section 1.43: Long-term loans
export const SECTION_1_43 = [9100, 9110, 9120, 9130, 9140, 9151, 9152, 9190] as const;
// Section 1.44: Debentures
export const SECTION_1_44 = [9200, 9210, 9220, 9230, 9290] as const;
// Section 1.45: Other long-term liabilities
export const SECTION_1_45 = [
  9400, 9310, 9320, 9330, 9340, 9350, 9360, 9370, 9410, 9420, 9431, 9432, 9435, 9440, 9450, 9460,
  9470, 9480, 9490,
] as const;
// Section 1.46: Shareholders' loans
export const SECTION_1_46 = [9500, 9510, 9520, 9530] as const;

// Section 1.48: Capital and reserves
export const SECTION_1_48 = [
  9600, 9605, 9610, 9620, 9631, 9632, 9640, 9650, 9660, 9670, 9690,
] as const;
// Section 1.49: Employee termination liability
export const SECTION_1_49 = [9700, 9710, 9720, 9790] as const;
// Section 1.50: Retained earnings
export const SECTION_1_50 = [9800, 9810, 9820, 9890] as const;
// Section 1.51: Current year profit/loss
export const SECTION_1_51 = [9900, 9910, 9920, 9930, 9940, 9950, 9960, 9980] as const;

// Valid מאזן (balance sheet) codes as specified in the SHAAM6111 document
export const ALLOWED_BALANCE_SHEET_CODES = [
  // Assets side - נכסים
  ...SECTION_1_27,
  ...SECTION_1_28,
  ...SECTION_1_29,
  ...SECTION_1_30,
  ...SECTION_1_21,
  ...SECTION_1_32,
  ...SECTION_1_33,
  7000, // Total assets

  // Liabilities and equity side - התחייבויות והון עצמי
  ...SECTION_1_35,
  ...SECTION_1_36,
  ...SECTION_1_37,
  ...SECTION_1_38,
  ...SECTION_1_39,
  ...SECTION_1_40,
  ...SECTION_1_41,
  8888, // Total assets (should equal 9999)

  ...SECTION_1_43,
  ...SECTION_1_44,
  ...SECTION_1_45,
  ...SECTION_1_46,
  9000, // Total liabilities

  ...SECTION_1_48,
  ...SECTION_1_49,
  ...SECTION_1_50,
  ...SECTION_1_51,
  9999, // Total liabilities and equity (should equal 8888)
] as const;
// Types for better type safety
export type AllowedBalanceSheetCode = (typeof ALLOWED_BALANCE_SHEET_CODES)[number];

// Codes that can have negative values
export const NEGATIVE_ALLOWED_BALANCE_SHEET_CODES = [
  7300, // Total accounts receivable
  8105, // Some fixed asset related
  8300,
  8315, // Suppliers and service providers
  9330, // Some long-term liability
  9700, // Employee termination liability
  9900,
  9930,
  9980, // Current year profit/loss items
] as const;

export type NegativeAllowedBalanceSheetCode = (typeof NEGATIVE_ALLOWED_BALANCE_SHEET_CODES)[number];

// Define the summary codes that should equal the sum of their subsections
export const COMMON_BALANCE_SHEET_SUMMARY_CODES = [
  7000, 7100, 7200, 7400, 7600, 7700, 7800, 8200, 8300, 8400, 8500, 8600, 8700, 9100, 9200, 9400,
  9500, 9600, 9800, 9900,
] as const;

// Define the summary codes that are not simple sums
export const UNCOMMON_BALANCE_SHEET_SUMMARY_CODES = [7300, 8000, 8888, 9000, 9700, 9999] as const;

export const BALANCE_SHEET_SUMMARY_CODES = [
  ...COMMON_BALANCE_SHEET_SUMMARY_CODES,
  ...UNCOMMON_BALANCE_SHEET_SUMMARY_CODES,
] as const;

export type CommonBalanceSheetSummaryCode = (typeof COMMON_BALANCE_SHEET_SUMMARY_CODES)[number];
export type BalanceSheetSummaryCode = (typeof BALANCE_SHEET_SUMMARY_CODES)[number];

export const BALANCE_SHEET_CODE_NAMES: Record<AllowedBalanceSheetCode, string> = {
  7000: 'סה"כ רכוש שוטף',
  7100: 'סה"כ מזומנים ושווי מזומנים',
  7110: 'שקלים',
  7120: 'מטבע חוץ',
  7150: 'פקדונות לזמן קצר',
  7200: 'סה"כ ניירות ערך',
  7215: 'אגרות חוב המוצגות לפי עלות מופחתת',
  7225: 'אגרות חוב המוצגות לפי שווי הוגן',
  7230: 'קרנות נאמנות',
  7290: 'ניירות ערך סחירים אחרים',
  7295: 'ני"ע שאינם סחירים',
  7300: 'סה"כ לקוחות',
  7310: 'לקוחות בישראל',
  7320: 'לקוחות בחו"ל',
  7330: 'שטרות והמחאות לקבל',
  7350: 'הכנסות לקבל',
  7360: 'כרטיסי אשראי',
  7380: 'הפרשה לחובות מסופקים',
  7390: 'לקוחות אחרים',
  7400: 'סה"כ חייבים ויתרות חובה',
  7410: 'מקדמות לספקים ואחרים',
  7420: 'הוצאות מראש',
  7430: 'מס הכנסה בניכוי הפרשות',
  7440: 'מוסדות ממשלתיים אחרים',
  7450: 'בעלי מניות (במישרין)',
  7461: 'צדדים קשורים בארץ',
  7462: 'צדדים קשורים בחו"ל',
  7470: 'עובדים',
  7490: 'חייבים אחרים ויתרות חובה',
  7600: 'סה"כ מיסים נדחים לזמן קצר',
  7610: 'בגין עובדים',
  7620: 'בגין הכנסות לקבל',
  7690: 'מיסים נדחים אחרים לזמן קצר',
  7700: 'סה"כ הלוואות לזמן קצר',
  7711: 'הלוואות לצדדים קשורים בארץ',
  7712: 'הלוואות לצדדים קשורים בחו"ל',
  7720: 'הלוואות לאחרים',
  7800: 'סה"כ מלאי',
  7805: 'מלאי שטחי מסחר ותעשיה למכירה',
  7810: 'מלאי ציוד במחסני החברה',
  7815: 'מלאי דירות',
  7820: 'מלאי במחסני ערובה',
  7825: 'מלאי בניינים בהקמה ועבודות בביצוע - עלות ישירה',
  7830: 'מלאי בדרך',
  7840: 'מלאי במשגור',
  7850: 'מלאי בתהליך',
  7860: 'מלאי חומרי גלם',
  7870: 'עלויות בביצוע לרבות עלויות שהוונו',
  7890: 'מלאי אחר',
  8000: 'סה"כ רכוש קבוע',
  8010: 'קרקע ובניינים',
  8020: 'שיפורים במושכר',
  8025: 'שיערוך נדל"ן להשקעה כנגד רווח והפסד',
  8030: 'מכונות וציוד',
  8040: 'כלי רכב',
  8050: 'מחשבים וציוד עיבוד נתונים',
  8060: 'רהיטים ואביזרים',
  8080: 'מלאי בסיסי',
  8090: 'רכוש קבוע אחר',
  8095: 'עלויות עוקבות',
  8100: 'אומדן עלות סילוק ופינוי',
  8105: 'היוון עלויות אשראי',
  8110: 'פחת שנצבר בניינים',
  8120: 'פחת שנצבר שיפורים במושכר',
  8130: 'פחת שנצבר מכונות וציוד',
  8140: 'פחת שנצבר כלי רכב',
  8150: 'פחת שנצבר מחשבים וציוד ייעוד נתונים',
  8160: 'פחת שנצבר רהיטים ואביזרים',
  8170: 'שיערוך רכוש קבוע כנגד קרן הון',
  8180: 'הפרשה לירידת ערך',
  8190: 'פחת שנצבר רכוש קבוע אחר',
  8200: 'סה"כ הוצאות מראש לזמן ארוך',
  8210: 'בגין גיוס הלוואות',
  8220: 'בגין שכירות לזמן ארוך',
  8290: 'אחרות',
  8300: 'סה"כ השקעות בחברות מוחזקות כלולות ומאוחדות',
  8315: 'השקעות המוצגות לפי שיטת השווי המאזני',
  8325: 'השקעות המוצגות לפי שווי הוגן',
  8335: 'השקעות המוצגות לפי עלות',
  8340: 'הלוואות',
  8350: 'שטרי הון',
  8400: 'סה"כ השקעות בחברות אחרות כולל ני"ע מוחזקים לזמן ארוך',
  8410: 'השקעות בחברות אחרות',
  8420: 'הלוואת לחברות אחרות',
  8440: 'השקעות בני"ע סחירים',
  8450: 'שטרי הון',
  8460: 'השקעה בשותפות',
  8490: 'השקעות אחרות',
  8500: 'סה"כ מיסים נדחים לזמן ארוך',
  8510: 'בגין התחייבות לפיצויים',
  8520: 'בגין רכוש קבוע',
  8590: 'אחר',
  8600: 'סה"כ הוצאות נדחות ורכוש אחר',
  8610: 'מוניטין',
  8620: 'הוצאות יסוד',
  8630: 'פטנט וזכויות יוצרים',
  8640: 'שיערוך נכסים בלתי מוחשיים כנגד קרן הון',
  8690: 'אחרות',
  8700: 'סה"כ נכסים לא שוטפים מוחזקים למכירה',
  8710: 'נכסים לא שוטפים מוחזקים למכירה',
  8888: 'סה"כ נכסים',
  9000: 'סה"כ התחייבויות שוטפות',
  9100: 'סה"כ בנקים והלואות לזמן קצר',
  9110: 'בנקים ומשיכת יתר',
  9120: 'הלוואות לזמן קצר',
  9130: 'חלויות שוטפות של הלוואות לזמן ארוך',
  9140: 'הלוואות מתושבי חוץ',
  9151: 'הלוואות מצדדים קשורים בארץ',
  9152: 'הלוואות מצדדים קשורים בחו"ל',
  9190: 'הלוואות מאחרים',
  9200: 'סה"כ ספקים ונותני שירותים',
  9210: 'ספקים בישראל',
  9220: 'ספקים בחו"ל',
  9230: 'שטרות והמחאות לפרעון',
  9290: 'ספקים ונותני שירות אחרים',
  9310: 'שכר עבודה לשלם',
  9320: 'הפרשה לחופשה והבראה',
  9330: 'מוסדות בגין עובדים',
  9340: 'מס הכנסה הפרשות בניכוי מקדמות',
  9350: 'מוסדות ממשלתיים אחרים',
  9360: 'הכנסות שכ"ד מראש',
  9370: 'מקדמות מלקוחות',
  9400: 'סה"כ זכאים ויתרות זכות',
  9410: 'הכנסות אחרות מראש',
  9420: 'הוצאות לשלם',
  9431: 'צדדים קשורים בארץ',
  9432: 'צדדים קשורים בחו"ל',
  9435: 'בעלי מניות',
  9440: 'הפרשה לאחריות ותיקונים',
  9450: 'הפרשה לתביעות',
  9460: 'הפרשות תלויות אחרות',
  9470: 'בונוסים ומענקים לשלם',
  9480: 'דיבידנד לשלם',
  9490: 'זכאים אחרים ויתרות זכות',
  9500: 'סה"כ עתודה למיסים נדחים לזמן קצר',
  9510: 'בגין עובדים',
  9520: 'בגין הפסדים להעברה',
  9530: 'מסים נדחים אחרים',
  9600: 'סה"כ התחייבויות לזמן ארוך',
  9605: 'אומדן עלות סילוק ופינוי',
  9610: 'בנקים',
  9620: 'הלוואות לזמן ארוך בניכוי חלויות שוטפות',
  9631: 'הלוואות מצדדים קשורים בארץ',
  9632: 'הלוואות מצדדים קשורים בחו"ל',
  9640: 'הלוואות מתושבי חוץ',
  9650: 'הלוואות לזמן ארוך מאחרים',
  9660: 'שטרי הון',
  9670: 'אג"ח',
  9690: 'אחרות',
  9700: 'סה"כ התחייבויות בשל יחסי עובד-מעביד',
  9710: 'עתודה לפיצויים',
  9720: 'ייעודה לפיצויים',
  9790: 'הפרשות אחרות',
  9800: 'סה"כ עתודה למיסים נדחים לזמן ארוך',
  9810: 'בגין התחייבות לפיצויים',
  9820: 'בגין רכוש קבוע',
  9890: 'אחר',
  9900: 'סה"כ הון עצמי',
  9910: 'הון מניות, הון בעל העסק, הון השותפות',
  9920: 'פרמיה על מניות',
  9930: 'קרנות הון',
  9940: 'תקבולים ע"ח מניות',
  9950: 'תקבולים ע"ח אופציות',
  9960: 'רכישה עצמית של ניירות ערך הוניים',
  9980: 'רווח (הפסד) שנצבר',
  9999: 'סה"כ התחייבויות והון',
} as const;
